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

时间:2011-03-19 16:01:49

标签: ruby-on-rails parameters

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

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

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

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

提前致谢。

5 个答案:

答案 0 :(得分:6)

回过头来完成这个任务。最终我通过使用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视图正确呈现它。

答案 1 :(得分:6)

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

答案 2 :(得分:3)

我刚刚遇到了类似的问题,我按照以下方式传递参数:

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果您将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 添加到{{1}}来电,您应该没问题。

{{1}}