2016-07-26 4 views
1

레일스 (특히 ActiveAdmin)에서 두 번째 매개 변수로 전달 된 배열을 가진 link_to 도우미는 무엇을합니까? 이 문서는 어디에 있습니까?Rails에서 기호와 객체가있는 배열을 전달할 때 link_to 도우미가 확장되는 이유는 무엇입니까?

index pagination_total: false do column :name, :sortable => :first_name do |user| link_to user.full_name, [:admin, user] end

그 기능은 무엇입니까 :

는이 코드가? [: admin, user]는 여기서 무엇을합니까?

ActiveAdmin.register Promotions::User, as: "User" do

그래서 실제로 밖으로 그래서 같은 모듈 앞에 추가로 제공 링크 :

admin_promotions_users_path 내가 원하지 않는 여기 일을 혼동

하나는 내 ActiveAdmin을 패널로 정의된다 . as:이 ActiveAdmin path_helper를 덮어 쓰기 때문에 오류가 발생합니다. 내가 원하는 것은 :

admin_users_path. 한마디로

, 나는 여기에 오류가 나는 link_helper는 기호 객체 배열을 통과 할 때 확장 모르는 것으로 생각합니다.

+0

'LINK_TO의 user.full_name :

link_to user.full_name, admin_users_path 

또는이 (동적 링크를 생성해야하는 경우) , [: admin, user]'=> admin_promotions_users_path (이것은 현재 판촉 컨트롤러에 있다고 가정합니다). 당신이 원하는 것은'link_to user.full_name, admin_users_path'입니다. –

+0

admin_user_path가되지 않는 이유는 무엇입니까? 프로모션은 어떻게 이루어 집니까? ActiveAdmin이 사용자 개체를 가로채는가? – Jwan622

답변

3

Ruby on Rails - link_to method에 따르면, 상기 방법은 서명 link_to(body, url, html_options = {})이다. url 매개 변수는 수행 할 수 있습니다

  1. 문자열을 "https://stackoverflow.com/users/john-smith"
  2. 처럼 @user
  3. 같은 물체 [:admin, user]
  4. admin_user_path (사용자)와 같은 경로

url 매개 변수의 경우와 같은 배열 문자열 일 뿐이므로 링크의 href에 전달됩니다. url 매개 변수가 Object, Array 또는 경로 인 경우이 값은 url_for 메서드 뒤에서 값을 전달합니다.

url_for은 객체를 취하여 클래스 유형이 User임을 확인하고 해당 user_path(@user) 경로 메소드를 찾습니다. 배열을 사용하면 먼저 심볼을 가져 와서 URL 도우미의 이름을 구성하는 데 사용합니다. 그런 다음 모든 객체를 가져 와서 값으로 전달합니다. 이 link_to user.full_name, [:admin, user] 마침내 (url_forpolymorphic_url에 대한 링크) this Stack Overflow answerurl_for에 따르면 <a href="https://stackoverflow.com/users/john-smith">John Smith</a>

업데이트

가 입력을 받아 어떤 이유로 부모 방법에있는로를 통과하게 admin_user_path(@user)로 변환되는 방식입니다 현재 범위를 추가합니다. link_to은 기본적으로 url_for을 사용합니다. 당신이 그것을"unscope"을 원하는 경우 polymorphic_path는 당신이 필요로하는 방법이다. 필자는이 개념을 내 자신의 앱과 비슷한 상황에서 테스트했고 @ Jwan622와 같은 결과를 얻었다.

url_for([:admin, user]) # Does not exist 
#=> admin_promotions_users_path 

polymorphic_path([:admin, user]) # Exists 
#=> admin_users_path 

따라서이를 사용해야 중 하나

당신이 관찰로
link_to user.full_name, polymorphic_path([:admin, user]) 
+0

그렇다면 왜 이름 공간 ActiveAdmin 페이지에서'link_to user.full_name, [: admin, user]'=>'admin_promotions_users_path'입니까? 내가 URL을 치려고하면 "link_to"헬퍼를 주석 처리 할 때 배열에이 link_to를 사용하면'admin_promotions_users_path' 오류가 발생합니다. – Jwan622

+1

내 대답이 업데이트되었습니다. –