2012-02-21 94 views
12

我想通过Rails中的link_to方法传递一个参数。我知道有一种方法可以通过URL来完成,但我真的不想这么做。有没有办法通过链接传递参数而不将其添加到链接本身?Link_to传递参数

我知道在PHP中,您可以发布,然后通过使用post变量来检索该值。 Rails中有类似的东西吗?

回答

10

link_to签名如下所示:

link_to(body, url_options = {}, html_options = {}) 

因此,POST看起来像(假设你要发布用户数据):

link_to "Link text", some_path(:foo => "bar", :baz => "quux"), user: @user, :method => :post 

用户的数据可以在控制器使用检索params[:user]

3

通过网络请求传递信息可以通过URL:http://example.com/foo?bar=blah在GET请求中完成是link_to的作用,或者通过通常需要表单的POST操作。形式可能有隐藏要素,如果你只是想要一个提交按钮:

<form method="POST" action="http://example.com/foo"> 
    <input type="hidden" name="bar" value="blah"> 
    <input type="submit"> 
</form> 

有各种轨道助手帮助,如果需要建立形式。

最后,如果你真的要想要一个链接,你可以选择CSS样式那个按钮,或者你可以用javascript来观察一个链接然后发布信息。 (Simon Bagreev发布的方法用javascript来做这个)

+0

谢谢。我想不通为什么西蒙Bagreev解决方案将工作。现在,我必须在CSS或JavaScript中寻找解释。 – Katarzyna 2015-06-04 18:33:54

1

什么样的参数?如果它是GET请求的关键字,则约定会使用url(例如params [:id]或活动记录路径变量)。如果你想发布一些东西,你应该使用一个表单。否则,你可以编写一个辅助方法来设置一个会话变量或者其他的东西,但是考虑一下你的架构和你在做什么试图去做,我敢肯定这里有人可以帮助你。

+0

实质上它是一个GET请求,所以我可能不应该做我想做的事情,只是遵循约定。目前,我的路由非常嵌套 - 已经在URL中使用了大约6个段。我试图避免使用该网址来放置其他几个细分。 – Kyle 2012-02-21 14:10:41

5

下面介绍如何通过link_to方法传递一个参数,以便例如用传入的参数创建一个新对象。这一策略将允许你通过在你的控制器动作中的变量并创建具有预定义属性的对象:在你的显示视图,您有一个名为@foo变量,你想传递给你的

控制器操作。在这种情况下,在你显示视图,你可以有

<%= link_to "Link Text", new_widget_path(:foo => @foo) %> 

这将@foo存储在PARAMS [:FOO],允许您使用PARAMS:在您的控制器[富]。您指向哪个控制器操作取决于* new_widget_path *。在这种情况下,您将被引导至WidgetController中的新的操作。

点击链接文本将直接滑轨连接到您的WidgetController的行动。你可以有

def new 
    @widget = Widget.new(:foo => params[:foo]) 
end 

然后,在你new.html.erb视图文件,你可以允许用户创建一个新的Widget对象与已经通过一个隐藏填写此预先定义的FOO属性表单字段:

<%= form_for(@widget) do |f| %> 
    <%= f.label :other_attribute %><br /> 
    <%= f.text_field :other_attribute %> 
    <%= f.hidden_field :foo %> 
    <%= f.submit %> 
<% end %> 

允许用户创建与已填好属性的新部件!

+1

这个解决方案令人惊奇的是它非常详细并且清楚地解释。非常感谢你的提交。一年后仍然有用。 – camdixon 2014-11-09 19:03:26

+0

此示例在单击link_to之后,仍未显示如何在URL中“隐藏”参数,然后才能在新页面上形成表单。 – Katarzyna 2015-06-04 18:32:14