RAILS3: передать произвольные параметры через button_to?
Я пытаюсь сделать что-то очень просто в моем первом приложении Rails (Rails 3), и я не уверен, что я делаю неправильно, или если есть лучший подход. Невозможно найти что-либо в Интернете или здесь, что решило его для меня, несмотря на многочисленные поиски.
В приложении у меня есть WorkRequests и статьи. При просмотре статьи я хочу, чтобы кнопка создала WorkRequest и, когда появилась новая форма WorkRequest, заполнила статью. По сути, я пытаюсь передать Article.id в новый WorkRequest.
Работает в link_ только путем добавления параметра, но я хочу, чтобы это была кнопка. Пока он отображается в HTML-форме статьи как параметр запроса, он никогда не попадает в метод WorkRequest.new. Эта статья в 2010 году объясняет проблему в деталях, но решение не работает для меня (см. мой комментарий в конце страницы.)
Кажется, что это должно быть довольно простой и простой способ сделать это (как только я это выясню, в моем приложении есть несколько других мест, где я хочу сделать то же самое), но я ударил головой против этой конкретной стены в течение нескольких дней. Я новичок в Rails - это мое первое приложение, поэтому я надеюсь, что кто-то более опытный может помочь!
Спасибо заранее.
Ответы
Ответ 1
Просто вернитесь, чтобы закончить это. В конечном итоге я решил это, используя link_to, но используя jQuery, чтобы он выглядел как кнопка. @kishie, если вы говорите, что сделали эту работу с button_to, я бы хотел увидеть код, но поскольку мне нравится jQuery, он решил, насколько мне известно (для этого приложения, во всяком случае.)
Здесь показан код в статье # show view. (Класс - это то, что делает его похожим на кнопку с помощью jQuery.)
<%= link_to "New Request", new_work_request_path(:article_id => @article.id), :class => "ui-button" %>
Здесь код в контроллере Work_Request новый метод:
if !params[:article_id].blank?
@work_request.article = Article.find(params[:article_id])
end
Затем новое представление Work_Request # отображает его правильно.
Ответ 2
Добавьте эту строку кода в файл routes.rb.
resources :work_requests do
member do
post 'new'
end
end
Это не должен быть метод GET, потому что вы отправляете информацию на сервер через: module_id. Затем это сработает.
<%= button_to("Add WorkRequest", {:controller => "work_request", :action => "new", :article_id => @article.id})%>
Ответ 3
Я просто ударил аналогичную проблему, и я получил ее для работы, передав параметр следующим образом:
<%= button_to("Add WorkRequest", new_work_request_path(:article_id => @article.id), :action => "new", :method => :get)%>
Ответ 4
В статье # show
<%= button_to("Add WorkRequest", {:controller => "work_request", :action => "new", :article_id => @article.id})%>
В work_requests # new
<%= f.text_field :article_id, :value => params[:article_id]%>
Ответ 5
Если вы вложите resources
для :work_requests
в :articles
в :articles
в routes.rb
, а затем передайте params[:id]
, который будет вашим article_id
, и добавьте :method => :get
в вызов button_to
, вы должно быть хорошо.
# config/routes.rb
resources :articles do
resources :work_requests
end
# app/views/articles/show.html.erb
<%= button_to "Add Work Request", new_article_work_request_path(params[:id]),
:method => :get %>
# app/controllers/work_requests_controller.rb
class WorkRequestsController < ApplicationController
...
def new
@work_item = WorkItem.new
@article = Article.find(params[:article_id])
...
end
...
end