如何在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。
我怎样才能做到这一点?
答案 0 :(得分:13)
link_to
采用与url_for
相同的选项。 话虽如此,没有:type
选项,它并不真正接受块,所以我的猜测是你的第二个例子工作的原因是因为它位于Book视图的范围内。 / del>正如Tom在回答此答案时所提到的,将块传递给link_to
可以用作第一个参数(链接文本)的替代。
如果Book是一个资源,您可以通过传递一个方便的,自动生成的资源路由为您提供link_to
帮助程序来生成您正在寻找的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" %>
答案 1 :(得分:0)
尝试Follwing
<% link_to(:edit, :type => 'book', :id => book) do %>
...
<% end %>
或实现相同的网址
<% link_to(:action=>'edit', :type => 'book', :id => book) do %>
...
<% end %>
答案 2 :(得分:0)
Ruby不知道您是否将do ... end
阻止发送到link_to
或book
,并将其发送到book
,因为它更靠近阻止。 book do ... end
会返回nil
,因此您将留下link_to :edit, :type=>'book', :id=>nil
。您需要将参数括起来,当您使用它时,我会使用控制器,操作,ID设置将其重写为更易理解:link_to{:controller=>"books",:action=>"edit",:id=>book}do ... end
答案 3 :(得分:0)
在mime_types.rb文件中添加:
Mime :: Type.register“text / application”,:book