【发布时间】:2017-01-23 11:23:02
【问题描述】:
我有两个型号MSellingStaff 和MPosition
#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
我在m_position 中有一个属性pos_short_name。当我尝试时
@sellers = MSellingStaff.includes(:m_position).all
@sellers.first.pos_short_name
我来了
#MSellingStaff:0x0000000651a5d0 的未定义方法“pos_short_name”
当我尝试时
@sellers.first.m_position.pos_short_name
我得到了
nil:NilClass 的未定义方法 `pos_short_name'
在 Rails 控制台中,我可以看到为
生成的 SQL@sellers = MSellingStaff.includes(:m_position).all
是
MSellingStaff 负载 (0.6ms) SELECT "m_ sell_staffs".* FROM "m_sales_staffs" MPosition 负载 (0.2ms) SELECT "m_position".* FROM "m_position" WHERE "m_position"."pos_id" IN ('')
我做错了什么?提前致谢
【问题讨论】:
-
"undefined method `pos_short_name' for nil:NilClass" 表示 @sellers.first.m_position 为 nil -- 换句话说,您有没有关联 MPosition 的 MSellingStaff 实例
-
@DavidAldridge 这很奇怪,
m_selling_staffs的emp_pos_id列中的所有值都存在于m_position的pos_id列中 -
你应该在
m_selling_staffs表中有pos_id,它应该根据你的关系引用m_position
标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord