RubyonRails.上次抛出未定义的方法错误



我使用一个标准的.each循环来列出分配给特定项目合同的作者的姓名。

当只有一个作者时,这很好:

<% @product.contracts.each do |product| %>
  <%= product.author.full_name %>
<% end %>

但不止一个作者,它看起来真的很丑陋。所以我尝试了这个:

<% @product.contracts.each do |p| %>
  <%= p.author.full_name %>
  <%= "," unless p == @product.last %>
<% end %>

但这并没有奏效。我得到了:undefined method last for #<Product:0x105e7ac38>

然后,我尝试了这个:<%= @product.map{|p| p.author.full_name}.join(",") %>

这也没用。我得到了:undefined method map for #<Product:0x105c6d760>

我确信我做错了什么,但我看不出来。

您试图在单个对象上调用这些方法,而不是在它们的数组(支持lastmap(上调用。

@product是一个模型对象,而不是它们的数组,这正是您所期望的。

从你的代码,你想要:

@product.contracts.last

 @product.contracts.map{|contract| contract.author.full_name}.join(",")

因为契约(假定(是对CCD_ 7和CCD_。

<% @product.contracts.each do |p| %>
  <%= p.author.full_name %>
  <% 
     # No point comparing p which is a contract object as it will never match with
     # a product object and as mentioned before, @product is not an array so 
     # .last wont work
  %>
  <%= "," unless p == @product.last %>
<% end %>

可能的解决方案:

<% @product.contracts.each do |p| %>
  <%= p.author.full_name %>
  <%= "," unless p == @product.contracts.last %>
<% end %>

相关内容

  • 没有找到相关文章