developer tip

Rails-link_to에서 매개 변수 전달

copycodes 2020. 11. 8. 10:12
반응형

Rails-link_to에서 매개 변수 전달


내 계정 색인 페이지에는 모든 계정이 나열되며 계정 당 "+ 서비스"에 대한 링크가 있습니다. 그러면 사용자가 / my_services / new 페이지로 이동하고 계정 색인 페이지에서 클릭 된 링크에 따라 적절한 ID로 account_id 필드가 미리 채워 져야합니다.

모든 페이지의 맨 아래에 debug (params)가 있으며 내가 시도한 내용으로 / my_services / new 페이지의 매개 변수에 : controller 및 : action 이외의 다른 항목이 표시되지 않습니다.

내가 시도한 링크는 다음과 같습니다.

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

누군가가이 작업을 수행하는 적절한 방법을 도울 수 있습니까? 나는 내가 시도한 몇 가지 끔찍한 작은 해키 한 것들로 아직 그것을 할 수 없었습니다.

편집하다

누군가 미래에이 답변을보고 있다면, 중첩 된 리소스 (아마도 shallow: trueroute.rb 옵션 포함)가 갈 길인 것 같습니다. 이 부분에 대한 내 routes.rb는 이제 다음과 같습니다.

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

내 링크는 이제 다음과 같습니다.

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

우선, link_to는 html 태그 도우미이고 두 번째 인수는 url, html_options입니다. 원하는 것은 account_id를 URL 매개 변수로 경로에 전달하는 것입니다. route.rb에서 이름이 지정된 경로를 올바르게 설정했다면 경로 도우미를 사용할 수 있습니다.

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

모범 사례는 모델 값을 다음 안에 중첩 된 매개 변수로 전달하는 것입니다.

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를 제어해야합니다. Rails 3에서는 강력한 컨트롤을 사용하여 컨트롤러가 속한 컨트롤러 내에서 유효한 매개 변수를 필터링 할 수 있습니다. 적극 추천합니다.

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

또한 사용자가 account_id를 자유롭게 설정하지 않은 경우 (예 : 사용자가 자신의 단일 account_id에 대해서만 서비스를 제출할 수있는 경우 요청을 통해 전송하지 않고 무언가를 추가하여 컨트롤러 내에서 설정하는 것이 좋습니다) 처럼:

@my_service.account_id = current_user.account_id 

사용자가 자신의 계정에서 서비스를 만들 수 있도록 허용하고 관리자가 attr_accessible의 역할을 사용하여 모든 사람을 만들 수 있도록 허용하는 경우 두 가지를 결합 할 수 있습니다.

도움이 되었기를 바랍니다


이 시도

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를 사용합니다.


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

여전히 작동하지 않으면 경로를 확인하십시오.

$ rake routes

참고 URL : https://stackoverflow.com/questions/10773695/rails-passing-parameters-in-link-to

반응형