Rails渴望加载关联

时间:2017-01-23 11:23:03

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我有两个模型MSellingStaffMPosition

#m_selling_staff.rb

class MSellingStaff < ActiveRecord::Base
  belongs_to :m_position
end

#m_position.rb

class MPosition < ActiveRecord::Base
  self.primary_key ='pos_id'
  has_many :m_selling_staffs, :foreign_key => 'emp_pos_id'
end

我在pos_short_name中有一个属性m_position。当我尝试

@sellers = MSellingStaff.includes(:m_position).all
@sellers.first.pos_short_name

我正在

  

未定义的方法`pos_short_name&#39;对于#MSellingStaff:0x0000000651a5d0

当我尝试

@sellers.first.m_position.pos_short_name

我正在

  

未定义的方法`pos_short_name&#39;为零:NilClass

在rails控制台中,我可以看到为

生成的SQL
@sellers = MSellingStaff.includes(:m_position).all

  

MSellingStaff负载(0.6ms)SELECT&#34; m_selling_staffs&#34;。* FROM   &#34; m_selling_staffs&#34; MPosition Load(0.2ms)SELECT&#34; m_position&#34;。*   FROM&#34; m_position&#34;在哪里&#34; m_position&#34;。&#34; pos_id&#34; IN(&#39;&#39;)

我做错了什么?提前谢谢

3 个答案:

答案 0 :(得分:2)

尝试将foreign_keyclass_name添加到MSellingStaff模型。

class MSellingStaff < ActiveRecord::Base
  belongs_to :m_position, :foreign_key => 'emp_pos_id', :class_name => "MPosition" 
end



class MPosition < ActiveRecord::Base
  self.primary_key ='pos_id'
  has_many :m_selling_staffs, :foreign_key => 'emp_pos_id'
end

答案 1 :(得分:0)

使用以下

@sellers.first.m_position.pos_short_name

这是因为pos_short_name在m_position模型中

答案 2 :(得分:0)

你应该搬家 :foreign_key => 'emp_pos_id' to belongs_to relation。