16

I got a bit of a newbie question. I'm trying to pass a variable from my view to my controller. Is there anyway my method in my controller can receive variables from my view?

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

Thanks in advance :)

4

2 回答 2

29

您可以直接通过 link_to 将信息添加到参数哈希。我不确定您到底要做什么,但我最近做了类似的事情来添加我在链接到新电子邮件时想要的电子邮件类型

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %>

现在我的参数看起来像:

{"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
于 2012-12-02T19:35:39.233 回答
2

当一个请求进来时,控制器(和任何模型调用)将首先被处理,然后视图代码被最后处理。视图可以调用助手中的方法,但不能引用控制器中的函数。

但是,一旦呈现页面,您可以将信息作为新请求的一部分发回控制器,或者使用 ajax/JQuery(等)远程调用控制器功能。

这有帮助吗?

于 2012-12-02T18:29:47.333 回答