Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将链接_中的参数传递到_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 将链接_中的参数传递到

Ruby on rails 将链接_中的参数传递到,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想通过Rails中的link\u方法传递一个参数。我知道有一种方法可以通过URL实现,但我真的不想这么做。有没有办法通过链接传递参数而不将其添加到链接本身 我知道在PHP中,可以使用post变量发布并检索该值。Rails中有类似的东西吗?链接到签名如下: link_to(body, url_options = {}, html_options = {}) 所以,POST看起来像(假设您想发布用户的数据): 可以使用params[:User]在控制器中检索用户数据,通过web请求传递信息可以通

我想通过Rails中的
link\u
方法传递一个参数。我知道有一种方法可以通过URL实现,但我真的不想这么做。有没有办法通过链接传递参数而不将其添加到链接本身


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

链接到
签名如下:

link_to(body, url_options = {}, html_options = {})
所以,POST看起来像(假设您想发布用户的数据):


可以使用
params[:User]
在控制器中检索用户数据,通过web请求传递信息可以通过URL:
http://example.com/foo?bar=blah
在一个GET请求中,这是link\u要做的,或者通过一个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实现的)

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

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

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

<%= link_to "Link Text", new_widget_path(:foo => @foo) %>
def new
  @widget = Widget.new(:foo => params[:foo])
end
然后,在您的new.html.erb视图文件中,您可以允许用户创建一个新的窗口小部件对象,其中该预定义的foo属性已通过隐藏的表单字段填写:

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



允许用户创建一个已经填写了foo属性的新小部件

本质上,这是一个GET请求,所以我可能不应该做我想做的事情,而应该遵循惯例。目前,我的路由嵌套得很好——已经在URL中使用了大约6个段。我试图避免使用URL来放置另外几个片段。这个解决方案的神奇之处在于它如此详细和清晰。非常感谢你的发帖。一年后仍然有用。此示例仍然没有显示如何在点击链接到url后,在进入新页面的表单之前,在url中“隐藏”参数。谢谢。我不明白为什么Simon Bagreev的解决方案会起作用。现在,我必须寻找CSS或JavaScript的解释。
 <%= form_for(@widget) do |f| %>
  <%= f.label :other_attribute %><br />
  <%= f.text_field :other_attribute %>
  <%= f.hidden_field :foo %>
  <%= f.submit %>
<% end %>