RAILS3: передать произвольные параметры через button_to? - PullRequest
16 голосов
/ 19 марта 2011

Я пытаюсь сделать что-то очень простое в своем первом приложении на Rails (Rails 3), и я не уверен, что делаю неправильно, или есть ли лучший подход.Не могу найти ничего в Интернете или здесь, что решило бы это для меня, несмотря на большой поиск.

В приложении у меня есть WorkRequests и Статьи.При просмотре статьи мне нужна кнопка для создания WorkRequest и, когда появляется новая форма WorkRequest, заполненная статья. По сути, я пытаюсь передать Article.id новому WorkRequest.

Работает в link_to, просто добавив параметр, но я хочу, чтобы это была кнопка.Хотя он отображается в HTML-коде формы Article в качестве параметра запроса, он никогда не попадает в метод WorkRequest.new. Эта статья 2010 года объясняет проблему в некоторых деталях, но решение не работает для меня (см. Мой комментарий в конце страницы.)

Похоже, это должно бытьдовольно простая и распространенная вещь (как только я это выясню, в моем собственном приложении есть несколько других мест, где я хочу сделать то же самое), но я уже несколько дней бьюсь головой об эту конкретную стену.Я новичок в Rails - это мое первое приложение - поэтому я надеюсь, что кто-то более опытный может помочь!

Заранее спасибо.

Ответы [ 5 ]

6 голосов
/ 27 сентября 2012

Добавьте эту строку кода в свой файл rout.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})%>
6 голосов
/ 14 июля 2011

Просто возвращаюсь, чтобы закончить.В конечном итоге я решил эту проблему с помощью link_to, но с помощью jQuery, чтобы он выглядел как кнопка.@ kishie, если вы говорите, что сделали эту работу с button_to, я бы хотел увидеть код, но поскольку мне нравится jQuery, он решается, насколько мне известно (в любом случае для этого приложения).

Вот код в статье # Показать представление.(Класс - это то, что делает его похожим на кнопку через 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 # отображает егодолжным образом.

3 голосов
/ 06 октября 2011

Я только что столкнулся с подобной проблемой и заставил ее работать, передав параметр следующим образом:

<%= button_to("Add WorkRequest", new_work_request_path(:article_id => @article.id), :action => "new", :method => :get)%>
1 голос
/ 19 марта 2011

В артикуле # 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]%>

0 голосов
/ 06 марта 2013

Если вы вложите свой resources для :work_requests в :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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...