在Link_to中传递参数

时间:2012-02-21 13:55:23

标签: ruby-on-rails ruby

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

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

4 个答案:

答案 0 :(得分:11)

link_to签名如下:

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

因此,POST看起来像(假设您想要POST用户的数据):

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

可以使用params[:user]

在控制器中检索用户的数据

答案 1 :(得分:5)

以下是通过link_to方法传递参数的方法,例如,使用传递的参数创建一个新对象。此策略允许您在控制器中的操作之间传递变量,并使用预定义的属性创建对象:

show 视图中,您有一个名为 @foo 的变量,您希望将其传递给控制器操作。在这种情况下,在 show 视图中,您可以拥有

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

将@foo存储在params [:foo]中,允许你在控制器中使用params [:foo]。您获得的控制器操作取决于* new_widget_path *。在这种情况下,您将被定向到WidgetController中的 new 操作。

单击链接文本将Rails指向WidgetController的 new 操作。你可以

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 %>

允许用户创建一个已填写 foo 属性的新窗口小部件!

答案 2 :(得分:3)

通过Web请求传递信息可以通过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>

如果需要,可以使用各种rails帮助程序来构建表单。

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

答案 3 :(得分:1)

什么样的参数?如果它是GET请求的密钥,则约定将指示使用url(例如params [:id]或活动记录路径变量)。如果你想发布一些东西,你应该使用一个表格。否则,您可以编写辅助方法来设置会话变量或其他内容,但考虑一下您的体系结构以及您在语义上尝试做什么,我相信这里有人可以帮助您。