4

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

<%= 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 传递给部分,以便它用 <%= the_right_path => 动态替换临时 #。

我试着做:

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

但我只是收到一条错误消息:

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

但是如果我用 href="#" 渲染部分,它会很好地渲染。

我也尝试了运气,href="<%= "#{item}_path" %>"但它只是打印出对象项的引用。

干杯

4

3 回答 3

4

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

编辑:

<% @games.each do |item| %>
  <section> 
    <%= render partial: 'application/item_synopsis_builder', locals:{item: item, path: game_path(item) %>
  </section>
<% end %>
于 2012-04-30T14:31:43.463 回答
1

如果您要查找的 URL 以模型命名,您可以简单地执行以下操作:

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

这将根据项目自动生成game_path或为您生成。promotion_path

调用所有这些魔法的方法polymorphic_url

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

于 2012-04-30T14:45:28.760 回答
0

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

像这样的东西:

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

部分:

send(link, variable: 'hello', other: 'world')
于 2021-02-20T20:35:18.630 回答