在Link_to中传递参数

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

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

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]在控制器中检索用户的数据

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

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

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

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

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

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

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

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

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

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

 

如果需要,有各种rails帮助程序可帮助构建表单。

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

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