【问题标题】:Rails: link_to with block and GET params?Rails:带有块和GET参数的link_to?
【发布时间】:2011-02-12 06:26:47
【问题描述】:

如何在 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。

我怎样才能做到这一点?

【问题讨论】:

    标签: ruby-on-rails activerecord actionview


    【解决方案1】:

    在 mime_types.rb 文件中添加:

    Mime::Type.register "text/application", :book

    【讨论】:

      【解决方案2】:

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

      如果 Book 是一个资源,您可以获取 link_to 帮助器来生成您正在寻找的 URL,方法是向它传递一个方便的、自动生成的资源路由 rails 为您提供的。在你尝试这个之前运行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&amp;query2=value。或者:

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

      【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        尝试关注

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

        或者实现相同的url使用

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多