2011-09-24 3 views
2

Ruby 및 Rails 배우기. 내가 호출 할 경우 시작 설명서를 다음에서Ruby 관점에서 edit_post_path 란 무엇입니까

는 index.html.erb에 다음과 같은 다른 것들 코드 중 생성
rails generate scaffold Post name:string title:string content:text 

:

<% @posts.each do |post| %> 
    <tr> 
    <td><%= post.name %></td> 
    <td><%= post.title %></td> 
    <td><%= post.content %></td> 
    <td><%= link_to 'Show', post %></td> 
    <td><%= link_to 'Edit', edit_post_path(post) %></td> 
    <td><%= link_to 'Destroy', post, confirm: 'Are you sure?', method: :delete %></td> 
    </tr> 
<% end %> 
</table> 

위의 나의 유일한 관심사는 edit_post_path, 그리고 내 질문은 무엇입니까? - 구체적으로 루비 관점에서. 확실히 루비 메서드가되는 모든 모습을 가지고 있으며, 가장 명확하게 루비 인 다른 코드에 포함되어 있습니다. posts.each do |post|...end 루비

그러나 edit_post_path가 루비 메서드 인 경우에는 코드가 어디 있습니까? 'post'는 레일스에 제공 한 레이블입니다. 아마도이 Ruby 메서드는 "레일스가 비계를 생성 할 때"생성 된 다른 루비 코드와 함께 내 사이트 디렉토리의 어딘가에 있어야합니다 (즉, 레일즈 전용 디렉토리 예). 그러나 어디에도 정의 된 'edit_post_path'와 같은 메소드가 없습니다. 그래서 Ruby는 전혀 아예 없으며, 어떤 이유로 든 그렇게 보이도록 고안된 것입니다. 실제로 Rails에 독점적으로 적용되는 무언가에 의해 처리되는 텍스트 문자열입니다. 이것이 Rails에 대해 아주 멋진 것의 예입니까?

답변

3

레일스 도우미 메서드 - 앱 내에서 라우팅하기 위해 James가 지적한대로 sugar 구문입니다.

사용 가능한 모든 경로를 보려면 명령 줄에서 rake routes을 실행하십시오. 왼쪽에 헬퍼 목록이 표시되고 두 번째 열, 세 번째 열 = URL 경로 형식의 HTTP 작업이 표시되며 마지막 열은 관련 제어기 및 동작의 분석입니다.

magic의 중심에 루비 코드의 일부를 확인하려면 다음과 같이 레일에 3 REPO을 확인해 : 또한 https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/mapper.rb#L444

을 특정 자원에 대한 사용자 정의 URL을 만들려면, 체크 아웃 : http://guides.rubyonrails.org/routing.html

희망하는 데 도움이 : https://github.com/rails/rails/blob/master/actionpack/lib/action_dispatch/routing/url_for.rb

여기에 일반적으로 라우팅에 대한 몇 가지 추가 정보를 원하시면입니다.

+0

나를 이길, 좋은 대답. OP, 도우미 메소드가 어디에 있는지 알고 싶다면 (그리고 앱이 시작될 때 동적으로 정의 된 "곧은 루비 메소드"가 정의되어 있음)이 정의되어 있으면 https : // github를 살펴보십시오. com/rails/rails/blob/d761ec486416df673030417047671c1a190f5aba/actionpack/lib/action_dispatch/routing/route_set.rb # L143-204 –

2

"설탕"- 구문이 Rails에 내장되어 있습니다. 개발 속도를 높이기위한 이와 같은 쉬운 방법이 많이 있습니다.

+0

왜 그들은 이것을 균일 성을 위해서 곧바로 루비 방법으로 만들지 못했을까요? 나는 이런 종류의 변칙에 대해 내 마음을 알 수있다. – Mark

+0

잘 모른다. 나에게 레일스는 훌륭하다. 그것은 나에게 많은 발전을 가져다 주었다. – jschorr

+0

"컨벤션 이상의 컨벤션"철학이 모든 사람들에게 맞지 않는다고 생각하십시오. – Jin

관련 문제