Ruby on rails 通过协会解决的问题
我希望通过一个关联循环,并包括一个通过关联。我在下面的页面上得到了nil:NilClass的未定义的方法“name”错误 我有一个客户模型,它有很多的销售,运作良好。但是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
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。它的工作原理是页面加载,但没有数据加载,我的数据库有数据。至少应该归还一些东西,但它没有。