2010-04-26 37 views
7

如何在link_to块声明中实现查询字符串和URL参数?现在,我有这个,它的工作原理:Rails:link_to与块和GET参数?

<%= 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

尝试Follwing

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

或达到相同的URL中使用

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

link_to需要的是url_for做同样的选择。 话虽如此,没有:type选项,它并不真的接受块,所以我的猜测是,你的第二个例子工作的原因是因为它位于书视图的范围内。正如Tom在对此答复的回复中所述,将代码块传递给link_to可用作第一个参数(链接文本)的替代品。

如果Book是一个资源,您可以通过传递一个方便的自动生成的资源路径来为您生成所需的URL,帮助程序可以让link_to帮您找到。运行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。另外:如果你要发送的do ... endlink_tobook,并把它发送到book,因为它更接近块

<%= link_to "Edit", :controller => "books", :action => "edit", :id => book, :query1 => "value", :query2 => "value" %> 
+1

块似乎是捕获输入'标签'内放置的方式。 http://railsapi.com/doc/rails-v2.3.5/classes/ActionView/Helpers/UrlHelper.html#M002452 – 2010-04-26 07:07:54

0

红宝石不知道。 book do ... end返回nil,所以你只剩下link_to :edit, :type=>'book', :id=>nil。您需要将参数括起来,并且当您处于这种状态时,我会用控制器,动作和ID设置来更改它,使其更容易理解:link_to{:controller=>"books",:action=>"edit",:id=>book}do ... end

0

in mime_types。RB文件中加入:

哑剧:: Type.register“文/应用”:书

+0

为请求添加一个类型 – 2010-04-27 07:36:08