在我的应用中,我有一个显示许多产品的视图。如果某个产品上有活跃的“交易”,则会为该交易提供该交易的链接,该交易会链接到该交易的show
操作,如下所示。
<tr>
<% @item.inventory_items.each do |p| %>
<td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
<td class="price">$<%= p.price %></td>
<td>
<% if Deal.where(:product_code => p.product_code, :vendor_id => p.vendor_id).exists? %>
<%= link_to "See It!", deal_path(Deal.where(:product_code => p.product_code, :vendor_id => p.vendor_id)) %>
<% else %>
<% end %>
</td>
<td>
......
</td>
</tr>
我遇到的问题是我对交易的show
行动正在考虑交易id
。这个交易ID并不是真正的参数,所以我怎么能告诉这个交易展示行动哪个交易我感兴趣?提前致谢!顺便说一句,我的上面的代码在我的if
块中感觉非常冗长且非常类似于轨道。如果您对此有任何建议,我们非常感谢您的建议。
交易/ show.html.erb
<%= link_to image_tag("#{@deal.vendor.image}") %>
<%= @deal.vendor.address %>
<%= image_tag(@deal.image) %>
交易展示行动:
def show
@deal = Deal.find(params[:id])
end
答案 0 :(得分:2)
尝试
<%= link_to "See It!", deal_path(Deal.where(:product_code => p.product_code, :vendor_id => p.vendor_id).first) %>
答案 1 :(得分:2)
你的代码肯定不是很像铁轨。
你应该做的是这样的事情:
<tr>
<% @item.inventory_items.each do |p| %>
<td><%= link_to image_tag("#{p.vendor.image_url}"), vendor_path(p.vendor) %></td>
<td class="price">$<%= p.price %></td>
<td>
<% if p.deal.exists? %>
<%= link_to "See It!", deal_path(:id => p.deal.id)) %>
<% else %>
<% end %>
</td>
<td>
......
</td>
</tr>
请注意,您可以在link_to中传递参数。请参阅此问题 - link_to send parameters along with the url and grab them on target page
如果您的模型设置正确,则不必在视图中进行查询。