Ruby on rails 通过协会解决的问题

Ruby on rails 通过协会解决的问题,ruby-on-rails,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 5,我希望通过一个关联循环,并包括一个通过关联。我在下面的页面上得到了nil:NilClass的未定义的方法“name”错误 我有一个客户模型,它有很多的销售,运作良好。但是sales是通过previousAgents通过previous\u agent\u id链接的,这就是我遇到的问题所在 账户模式 has_many :sales, primary_key: 'account_id' belongs_to :previousAgent, primary_key: 'previous_agent

我希望通过一个关联循环,并包括一个通过关联。我在下面的页面上得到了nil:NilClass的未定义的方法“name”错误

我有一个客户模型,它有很多的销售,运作良好。但是
sales
是通过
previousAgents
通过
previous\u agent\u id
链接的,这就是我遇到的问题所在

账户模式

has_many :sales, primary_key: 'account_id'
belongs_to :previousAgent, primary_key: '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 %>

前代理人

日期:

评论:

使用

编辑,因为问题被编辑

<%= p.previousAgent.try(:name) %>

因此,如果
p.previousAgent
nil
则不会抛出错误&如果
p.previousAgent
返回
previousAgent
的对象,则上述代码将返回
name
属性的值


这里的检查方法很简单。由于每笔销售只能有一名销售代理,请按如下方式定义您的关联:

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 %>

前代理人

日期:

评论:


我已经想出了一个解决方案。但我不确定这为什么会奏效

我在我的销售模型中添加了外键

belongs_to :previousAgent, primary_key: 'previous_agent_id', foreign_key: 'previous_agent_id'

如果有人能解释为什么需要主键和外键,那就太好了。

在任何情况下,PreviousAgent都可以为零吗?如果是这样,你应该检查p.previousAgent.nil?在打印名称之前。我已经在其中放置了条件来检查,并且在那里有数据时它不会显示任何内容。顺便说一句,遵守Rails命名约定通常是很好的-在这种情况下,您应该命名您的关联
以前的\u代理
。检查我编辑的答案,希望它对您有所帮助,这就是我现在要走的道路。但是仍然为nil:NilClass错误获取未定义的方法'id'。谢谢Salil。它的工作原理是页面加载,但没有数据加载,我的数据库有数据。至少应该归还一些东西,但它没有。