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: true
route.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
'developer tip' 카테고리의 다른 글
Mockito 구문에 대한 가져 오기 정적 문 찾기 (0) | 2020.11.08 |
---|---|
목록의 정수 범위 합계 (0) | 2020.11.08 |
AngularJS 템플릿의 조건부 논리 (0) | 2020.11.08 |
ideavim을 사용한 Intellij IDEA (0) | 2020.11.08 |
CSS 이미지를 포함한 웹 페이지 및 종속성 다운로드 (0) | 2020.11.08 |