7

如何在link_to块声明中实现查询字符串和 URL 参数?现在,我有这个,它有效:

<%= link_to 'Edit', :edit, :type => 'book', :id => book %>

以上工作,并输出:

http://localhost:3000/books/edit/1?type=book

我想做的是这样的:

<% link_to :edit, :type => 'book', :id => book do %>
    ...
<% end %>

但上述格式输出:

http://localhost:3000/books/edit/

这不是我要找的......我希望它像前面的例子一样输出一个 URL。

我怎样才能做到这一点?

4

4 回答 4

13

link_to采取相同的选择url_for话虽如此,没有:type选项也没有真正接受块,所以我的猜测是您的第二个示例有效的原因是因为它位于 Book 视图的范围内。正如汤姆在对此答案的回复中所提到的,将块传递给link_to可以用作第一个参数(链接文本)的替换。

如果 Book 是一种资源,您可以通过将link_to帮助程序传递给 rails 为您提供的方便、自动生成的资源路由之一来生成您正在查找的 URL。rake routes在你尝试这个之前运行:

<%= link_to "Edit", edit_book_path(book) %>

否则,您可以明确说明要链接到的控制器/操作:

<%= link_to "Edit", :controller => "books", :action => "edit", :id => book %>

快乐的黑客。

编辑:几乎忘记了,您可以在声明要链接到的对象的 id 之后添加绕过它们的查询字符串。

<%= link_to "Edit", edit_book_path(book, :query1 => "value", :query2 => "value")

会产品/books/1/edit?query1=value&query2=value。或者:

<%= link_to "Edit", :controller => "books", :action => "edit", :id => book, :query1 => "value", :query2 => "value" %>
于 2010-04-26T06:55:59.913 回答
0

Ruby 不知道您是否将do ... end块发送到link_toor book,并且将其发送到book是因为它更靠近块。book do ... end返回nil,所以你只剩下link_to :edit, :type=>'book', :id=>nil. 您需要将参数括起来,当您使用它时,我会重写它,以便使用控制器、操作、id 设置更容易理解:link_to{:controller=>"books",:action=>"edit",:id=>book}do ... end

于 2010-04-26T07:08:53.807 回答
0

在 mime_types.rb 文件中添加:

Mime::Type.register "文本/应用程序", :book

于 2010-04-26T10:56:56.240 回答
0

尝试关注

<% link_to(:edit, :type => 'book', :id => book) do %>
    ...
<% end %>

或实现相同的 url 使用

<% link_to(:action=>'edit', :type => 'book', :id => book) do %>
    ...
<% end %>
于 2010-04-26T06:45:57.407 回答