将参数从视图传递到控制器

时间:2012-12-02 18:06:34

标签: ruby-on-rails ruby ruby-on-rails-3.1 controller parameter-passing

我有一个新手问题。我正试图将一个变量从我的视图传递给我的控制器。无论如何我的控制器中的方法可以从我的视图中接收变量吗?

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

提前致谢:)

2 个答案:

答案 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(等)远程调用控制器函数。

这有帮助吗?

相关问题