Rails,将路径变量传递给部分

时间:2012-04-30 14:18:06

标签: ruby-on-rails partial-views

我正在构建一个将被不同视图(游戏和促销)使用的部分内容。 我在视图/应用程序中创建了部分

<%= content_tag :article, class: ['article'] do %>
  <a href="#">
    <%= image_tag item.thumbnail %>
  </a>
  <h2><%= item.name %></h2>
  <p><%= item.description %></p>
  <p>
    <%= link_to 'Read more', "#" %>
  </p>
<% end %>

我从视图游戏视图(或促销活动)中调用它:

<% @games.each do |item| %>
  <section> 
      <%= render 'application/item_synopsis_builder', item: item %>
  </section>
<% end %>

它可以很好地填充和渲染部分,但是我无法理解如何将view_path传递给部分,以便它动态地用&lt;%= the_right_path =&gt;来替换临时#。

我试着这样做:

<%= render partial: 'application/item_synopsis_builder', locals: {item: item, path: game_path } %>

但我收到一条错误消息:

No route matches {:action=>"show", :controller=>"games"}

但是如果我使用href =“#”渲染部分,它会渲染得很好。

我也试过href="<%= "#{item}_path" %>",但它打印出对象项的参考。

干杯

3 个答案:

答案 0 :(得分:4)

我不知道这是你的错误,但在我看来game_path期望一个游戏对象作为参数,这可能是你的错误。

编辑:

<% @games.each do |item| %>
  <section> 
    <%= render partial: 'application/item_synopsis_builder', locals:{item: item, path: game_path(item) %>
  </section>
<% end %>

答案 1 :(得分:1)

如果您要查找的网址是以模型命名的,您只需执行以下操作:

<%= link_to "Read more", item %>

这会自动为您生成game_pathpromotion_path,具体取决于项目。

执行所有这些魔法的方法称为polymorphic_url

您当前示例无效的原因是您没有将对象提供给game_path。现在它不知道要生成哪个ID。没有匹配{:action=>"show", :controller=>"games"}的路由,但有一条匹配{:action=>"show", :controller=>"games", :id=>"something"}的路由。

答案 2 :(得分:0)

您可以将其作为字符串发送,然后使用 send 调用

像这样:

render partial: 'partial', locals: { link: "products_path" }

部分:

send(link, variable: 'hello', other: 'world')