[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.우선, 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.이 시도
이 시도
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.
link_to "+ Service", controller_action_path(:account_id => acct.id)
이 경우 여전히 경로를 확인 작동하지 :
$ rake routes
from https://stackoverflow.com/questions/10773695/rails-passing-parameters-in-link-to by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 프로필에 어떤 도구를 당신이 권장합니까 앱 레일? [닫은] (0) | 2020.02.15 |
---|---|
[RUBY-ON-RAILS] 의 nginx / 여객에서 "불완전한 응답은 응용 프로그램에서받은" (0) | 2020.02.15 |
[RUBY-ON-RAILS] 컬 : (1) 프로토콜 지원 또는 libcurl에 비활성화하지 HTTPS (0) | 2020.02.15 |
[RUBY-ON-RAILS] ExecJS :: ProgramError : 예기치 않은 토큰 punc«(»예상 punc«:»레이크 자산을 실행 : 생산에 사전 컴파일 (0) | 2020.02.15 |
[RUBY-ON-RAILS] belongs_to와 has_one의 차이점은 무엇입니까? (0) | 2020.02.15 |