我希望循环关联并包含一个直通关联。我得到了一个未定义的方法`名称'对于nil:NilClass 错误如下。
我有一个具有很多销售额的帐户模型,工作正常。但sales
通过previousAgents
与previous_agent_id
相关联,这就是我遇到问题的地方。
帐户模型
has_many :sales, primary_key: 'account_id'
销售模式
belongs_to :previousAgent, primary_key: 'previous_agent_id'
帐户视图
<% @account.sales.each do |p| %>
<p>Previous Agent <%= p.previousAgent.name %></p>
<p>Date: <%= p.date.strftime("%d %B, %Y") %></p>
<p>Comments: <%= p.comment %></p>
<% end %>
答案 0 :(得分:1)
使用
<%= p.previousAgents.first.name %>
帐户has_many previousAgents
因此,p.previousAgents
如果您想要显示之前所有代理人,请返回previousAgent
的数组。
<% @account.sales.each do |p| %>
<% for agent in p.previousAgents %>
<p>Previous Agent <%= agent.name %></p>
<% end %>
<p>Date: <%= p.date.strftime("%d %B, %Y") %></p>
<p>Comments: <%= p.comment %></p>
<% end %>
已编辑,因为问题已被编辑。
<%= p.previousAgent.try(:name) %>
因此,如果p.previousAgent
为nil
,则不会产生错误&amp;如果p.previousAgent
返回PreviousAgent
的对象,那么上面的代码将返回name
属性的值。
在此处检查try
方法
答案 1 :(得分:0)
这很简单。由于每次销售只能有1个销售代理商定义您的关联,如下所示,
Sale.rb
belongs_to :PreviousAgent, foreign_key: previous_agent_id
Agent.rb
has_many :sales
然后,在您的代码中,您将循环浏览属于某个帐户的每笔销售,
<% @account.sales.each do |p| %>
<p>Previous Agent <%= p.previousAgent.name %></p>
<p>Date: <%= p.date.strftime("%d %B, %Y") %></p>
<p>Comments: <%= p.comment %></p>
<% end %>
答案 2 :(得分:0)
我已经为此制定了解决方案。我不确定为什么这有效。
我在销售模式中添加了一个foreign_key。
belongs_to :previousAgent, primary_key: 'previous_agent_id', foreign_key: 'previous_agent_id'
如果有人能够阐明为什么需要主键和外键都会很棒。