将参数从视图传递到控制器
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 对我来说有点复杂 :)以上是关于将参数从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章
C# MVC 使用 dotnetfiddle 将参数从视图传递到控制器