将另一个对象添加到link_to数组

时间:2014-02-20 20:22:49

标签: ruby-on-rails

感谢先前的回答,我在视图中有以下代码。

 <%= @miniature.contents.where(miniature_id: @miniature).map { |content| link_to content.miniset.name, content.miniset }.join(", ").html_safe %>

输出

`Minisetname, Minisetname, Minisetname`

我想在链接的(" x#{content.quantity}")之后添加Minisetname,以便它显示为

Minisetname (x3), Minisetname (x7), Minisetname (x4)

如果(" x#{content.quantity}")不为空,我只希望它附加content.quantity

我在一个区块的其他地方这样做,但我无法弄清楚如何使用上面的数组。

3 个答案:

答案 0 :(得分:1)

首先,假设您已经在模型中设置了关系,我真的不明白为什么您需要where

然后,我会将代码结构化为:

查看

<%= content_miniset_links_with_quantity(@miniature) %>

<强>辅助

def content_miniset_links_with_quantity(miniature)
  miniature.contents.map{|content| content_miniset_link_with_quantity(content)}.join(', ').html_safe
end

def content_miniset_link_with_quantity(content)
  string = link_to content.miniset.name, content.miniset
  string << "(x#{content.quantity})" if content.quantity.present?
  return string
end

答案 1 :(得分:0)

您只需将它们放在link_to

之后的字符串中
link_to "#{content.miniset.name} #{content.quantity}", content.miniset }.join(", ").html_safe

请确保您没有标记不是html_safe的内容。

编辑:让它显得很容易。

<ul class="items-list">
<% @miniature.contents.where(miniature_id: @miniature).map do |content| %>
   <li class="item-holder">
    <ul class="item-details">
     <li class="item-link"><%= link_to content.miniset.name.html_safe, foobar_url(content.miniset.id)  %>,</li>
     <li class="item-quant">(x<%= content.quantity %>)</li>
    </ul>
  <li>,
<%end%>
</ul>

注意,你实际上并不需要div,或者做多行,但这只是更好的风格。哦,第二个div可能会更好地成为一个跨度,或者两个内部div可能会更好地作为跨度,但你明白了。

OH !!我只是看着你的情况。所以,这不太可能是必要的(除非内容是你写的一些奇怪的非显而易见的功能)。 @minature.contents将自动加载内部联接关联。

好的,所以这里使用了连接。

<% @miniature.contents.where(miniature_id: @miniature).map do |content| %>
  <%= link_to content.miniset.name, foobar_url(content.miniset.id)  %> (x<%= content.quantity %>)
<% end.join(", ") %>

答案 2 :(得分:0)

首先,不要在视图中使用where子句。这是一个糟糕的代码。并且,当你执行<%= =>时,它实际输出任何东西。您正在使用返回map的{​​{1}}函数。你应该以这种方式重新排列并完成你的工作。

array