RAILS3:通过button_to传递任意参数?

我正在尝试在我的第一个Rails应用程序(Rails 3)中做一些非常简单的事情,我不确定我做错了什么,或者是否有更好的方法。 虽然搜索很多,但在网上找不到任何东西,或者在这里找不到任何东西。

在应用程序中,我有WorkRequests和文章。 在查看文章时,我想要一个按钮来创建WorkRequest,并且当出现新的WorkRequest表单时,填写文章。基本上,我正在尝试将Article.id传递给新的WorkRequest。

只需添加参数即可在link_to中工作,但我希望它是一个按钮。 虽然它在Article表单的HTML中显示为查询参数,但它永远不会到达WorkRequest.new方法。 2010年的这篇文章详细解释了这个问题,但该解决方案对我不起作用(请参阅我在页面末尾的评论。)

这似乎应该是一个相当容易和常见的事情(一旦我弄明白,在我自己的应用程序中还有其他几个地方我想做同样的事情)但我一直在敲打这个特殊的东西墙几天了。 我是Rails的新手 – 这是我的第一个应用程序 – 所以我希望有经验的人可以提供帮助!

提前致谢。

只是盘旋回来完成这个。 最终我通过使用link_to解决了这个问题,但使用jQuery使它看起来像一个按钮。 @kishie,如果你说你用button_to做了这个工作我想看看代码,但是因为我喜欢jQuery它已经解决了我所关心的(无论如何,对于这个应用程序。)

这是Article#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#new视图正确呈现它。

在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})%> 

我刚刚遇到类似的问题,我通过传递参数使其工作如下:

 <%= button_to("Add WorkRequest", new_work_request_path(:article_id => @article.id), :action => "new", :method => :get)%> 

在文章#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]%>

如果你将你的resources嵌套在:work_requests中的:work_requests :articles routes.rb ,那么传递你的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