Rails:link_to与块和GET参数?

时间:2010-04-26 05:32:44

标签: ruby-on-rails activerecord actionview

如何在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 个答案:

答案 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_tobook,并将其发送到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