我有一个新手问题。我正试图将一个变量从我的视图传递给我的控制器。无论如何我的控制器中的方法可以从我的视图中接收变量吗?
Post view: show.html.erb:
....
<%=link_to "Add relationship", :method => :add_relationship(@rela) %>
Controller: post.controller.rb:
def add_relationship(rela)
@post = Post.find(params[:id])
if current_user.id == @post.user_id
@post.rel_current_id = rela.id
@post.save
redirect_to relationships_url
else
redirect_to posts_url, :notice => "FY!"
end
end
提前致谢:)
答案 0 :(得分:24)
您可以通过link_to向params哈希添加信息。我不确定你到底想要做什么,但我最近做了类似这样的事情,当我链接到新邮件时添加我想要的电子邮件类型
<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %>
现在我的params看起来像:
{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"}
我可以通过参数
访问该类型email_type = params[:type]
如果你传入实例变量@rela而不是字符串,你将获得params散列中的object_id。
根据下面的评论,我正在添加我的路线以显示路径new_invoice_email_path的工作原理:
resources :invoices do
resources :emails
end
答案 1 :(得分:2)
当请求进入时,控制器(以及任何模型调用)将首先被处理,然后最后处理视图代码。视图可以调用助手中的方法,但不能在控制器中引用函数。
但是,一旦呈现页面,您可以将信息作为新请求的一部分发布回控制器,或者使用ajax / JQuery(等)远程调用控制器函数。
这有帮助吗?