在Link_to中传递参数

Kyl*_*yle 12 ruby ruby-on-rails

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

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

Sim*_*eev 11

link_to 签名如下:

link_to(body, url_options = {}, html_options = {})
Run Code Online (Sandbox Code Playgroud)

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

link_to "Link text", some_path(:foo => "bar", :baz => "quux"), user: @user, :method => :post
Run Code Online (Sandbox Code Playgroud)

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


Amy*_*.js 5

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

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

<%= link_to "Link Text", new_widget_path(:foo => @foo) %>
Run Code Online (Sandbox Code Playgroud)

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

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

def new
  @widget = Widget.new(:foo => params[:foo])
end
Run Code Online (Sandbox Code Playgroud)

然后,在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 %>
Run Code Online (Sandbox Code Playgroud)

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