我正在构建一个将被不同视图(游戏和促销)使用的部分内容。 我在视图/应用程序中创建了部分
<%= 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" %>"
,但它打印出对象项的参考。
干杯
答案 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_path
或promotion_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')