通过关联的问题

时间:2017-11-17 05:59:34

标签: ruby-on-rails ruby-on-rails-5

我希望循环关联并包含一个直通关联。我得到了一个未定义的方法`名称'对于nil:NilClass 错误如下。

我有一个具有很多销售额的帐户模型,工作正常。但sales通过previousAgentsprevious_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 %>

3 个答案:

答案 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.previousAgentnil,则不会产生错误&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'

如果有人能够阐明为什么需要主键和外键都会很棒。