복붙노트

[RUBY-ON-RAILS] 레일 - LINK_TO에 매개 변수를 전달

RUBY-ON-RAILS

레일 - LINK_TO에 매개 변수를 전달

내 계정 인덱스 페이지에는 모든 계정 및 계정 당 "+ 서비스"에 대한 링크가 있습니다; 이는 링크하는 것은 계정 인덱스 페이지에서 클릭 한에 따라 / my_services / 새 페이지로 사용자를 적절한 ID로 미리 채워 ACCOUNT_ID 필드가 있어야합니다.

나는 모든 페이지의 하단에있는 디버그 (PARAMS)가, 내가 노력하고있어 함께, 내가 아닌 다른받지 못했습니다 : 컨트롤러 : 조치가 / my_services / 새 페이지 내 매개 변수에 표시합니다.

내가 노력했습니다 링크는 이것이다 :

link_to "+ Service", "my_services/new", :account_id => acct.id

나는 다음도 서비스 컨트롤러의 로직을 가지고 :

def new
  @my_service = MyService.new
  if params[:account_id]
    @my_service.account_id = params[:account_id]
  end
end

이 일을 적절한 방법으로 캔 누군가의 도움? 나는 아직 내가 시도 약간 불쾌한 작은 해키 것들로 함께 가야 할 수 없었다.

편집하다

사람이 미래에이 답변을보고하면, 알고 보니, 중첩 된 자원 (아마도 얕은 : routes.rb에서 진정한 옵션) 갈 수있는 방법이 될 것으로 보인다. 이 부분에 대한 나의 routes.rb 이제 다음과 같습니다 :

resources :accounts, shallow: true do
  resources :services
end

내 링크는 지금과 같이 :

<%= link_to "+ Service", new_service_path(:service => { :account_id => @account.id } ) %>

해결법

  1. ==============================

    1.우선, LINK_TO는 두 번째 인수는 html_options 다음에 URL이다하는 HTML 태그 도우미입니다. 당신이 원하는 것은 경로의 URL 매개 변수로 ACCOUNT_ID 전달하는 것입니다. 제대로 routes.rb에 지정된 경로를 설정 한 경우, 당신은 경로 도우미를 사용할 수 있습니다.

    우선, LINK_TO는 두 번째 인수는 html_options 다음에 URL이다하는 HTML 태그 도우미입니다. 당신이 원하는 것은 경로의 URL 매개 변수로 ACCOUNT_ID 전달하는 것입니다. 제대로 routes.rb에 지정된 경로를 설정 한 경우, 당신은 경로 도우미를 사용할 수 있습니다.

    link_to "+ Service", new_my_service_path(:account_id => acct.id)
    

    나는 가장 좋은 방법은 내 중첩 된 PARAM으로 모델 값을 전달하는 것입니다 생각 :

    link_to "+ Service", new_my_service_path(:my_service => { :account_id => acct.id })
    
    # my_services_controller.rb
    def new
      @my_service = MyService.new(params[:my_service])
    end
    

    그리고 당신은 그 ACCOUNT_ID은 '질량 과제'에 대한 허용을 제어 할 필요가있다. 레일 3에서는 속해 컨트롤러 내에서 유효한 PARAMS을 필터링하는 강력한 컨트롤을 사용할 수 있습니다. 나는 매우 좋습니다.

    http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods

    또한 ACCOUNT_ID 자유롭게 사용자가 설정되지 않은 경우 (예를 들어, 사용자는 자신의 단일 ACCOUNT_ID에 대한 서비스를 제출할 수 있습니다, 다음은 요청을 통해 보낼 수 없습니다 더 좋은 방법은,하지만 뭔가를 추가하여 컨트롤러 내에서 설정 처럼:

    @my_service.account_id = current_user.account_id 
    

    당신은 확실히 당신은 단지 사용자가 자신의 계정에 서비스를 만들 수 있도록 허용 할 경우 두 가지를 결합하지만, 관리자가 attr_accessible에서 역할을 사용하여 사람의를 만들 수 있습니다.

    도움이 되었기를 바랍니다

  2. ==============================

    2.이 시도

    이 시도

    link_to "+ Service", my_services_new_path(:account_id => acct.id)
    

    당신이 원하는대로 그것은 ACCOUNT_ID을 전달합니다.

    LINK_TO 사용에 대한 자세한 내용은이 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

  3. ==============================

    3.

    link_to "+ Service", controller_action_path(:account_id => acct.id)
    

    이 경우 여전히 경로를 확인 작동하지 :

    $ rake routes
    
  4. from https://stackoverflow.com/questions/10773695/rails-passing-parameters-in-link-to by cc-by-sa and MIT license