我正在尝试在我的第一个Rails应用程序(Rails 3)中做一些非常简单的事情,我不确定我做错了什么,或者是否有更好的方法。在网上找不到任何东西,或者在这里找到了解决它的任何东西,尽管经常搜索。
在应用程序中我有WorkRequests和Articles。在查看文章时,我想要一个按钮来创建WorkRequest,并且当出现新的WorkRequest表单时,填写文章。实际上,我正在尝试将Article.id传递给新的WorkRequest。
只需添加参数即可在link_to中工作,但我希望它是一个按钮。虽然它在Article表单的HTML中显示为查询参数,但它永远不会到达WorkRequest.new方法。来自2010年的This文章详细解释了该问题,但该解决方案对我不起作用(请参阅页面末尾的评论。)
这似乎应该是一件相当容易和常见的事情(一旦我弄明白,我自己的应用程序中还有其他几个地方我想做同样的事情)但我一直在敲我的脑袋现在对这个特殊的墙壁反对了几天。我是Rails的新手 - 这是我的第一个应用程序 - 所以我希望有经验的人可以提供帮助!
提前致谢。
答案 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}}