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

Posted

技术标签:

【中文标题】将参数从视图传递到控制器【英文标题】:Passing parameters from view to controller 【发布时间】:2012-12-02 18:06:34 【问题描述】:

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

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

提前致谢:)

【问题讨论】:

你可以使用params hash... 这取决于变量类型。您不能将对象传递给控制器​​。您可以传递在隐藏标签中定义它的简单参数 我实际上只想将模型中的 id 更改为该页面的当前 id。我的页面有一个 id,这就是我试图传递该模型的原因。如果我想从我的页面传递一个参数并将其保存在我的帖子模型中(使用我的帖子控制器)。我该怎么做?诸如“单击此链接”之类的内容会更改 ID。 add_relationship, params[:rel_current_id = @rela.id] 【参考方案1】:

您可以直接通过 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

【讨论】:

是的,这是我正在寻找的东西。 new_invoice_email_path 是您的控制器或方法吗? Pfft,我真的需要更多地了解这一点。比起ruby,我更习惯JAVA... 这条路线将我带到电子邮件控制器,新操作。电子邮件是发票的嵌套路由,我会将路由添加到上面的答案中 打开命令提示符并输入“rake routes”以查看您拥有的已定义路由。它还告诉您它映射到的控制器和操作。【参考方案2】:

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

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

这有帮助吗?

【讨论】:

抱歉,ajax 对我来说有点复杂 :)

以上是关于将参数从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章

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

Url.Action:如何将参数从视图传递到控制器?

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

C# MVC 使用 dotnetfiddle 将参数从视图传递到控制器

将字符串从控制器传递到部分视图作为 javascript 函数参数

ASP .NET MVC 3 - 将参数从视图传递到控制器