2017-01-23 1 views
1

は私がm_positionに属性pos_short_nameを持つ2つのモデルMSellingStaffMPositionRailsのイーガーローディング団体

#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 

を持っています。 0x0000000651a5d0

と私は

@sellers.first.m_position.pos_short_name 

をしようとしたとき、私は

を取得しています:私は

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

をしようとすると、私は

未定義のメソッド#MSellingStaffため `pos_short_name」を取得しています nilのための

未定義のメソッド `pos_short_name」:NilClass

レールコンソールでは、私はSQLが

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

のために生成されたことがわかりますして

MSellingStaffロード(0.6msであります)SELECT "m_selling_staffs"。* FROM "m_selling_staffs" MPosition Load(0.2ms)SELECT "m_position"。* FROM "m_position" WHERE "m_positi on "" pos_id "IN( '')

私は間違っていますか?

+0

"nilのための未定義のメソッド' pos_short_name」:NilClassは、" @のsellers.first.m_positionがnilであることを示している - つまり、あなたは関連するMPosition –

+0

@DavidAldridgeはthatsの持っていないMSellingStaffのインスタンスを持っています奇妙なことに、 'm_selling_staffs'の' emp_pos_id'カラムのすべての値は 'm_position'の' pos_id'カラムにあります。 –

+0

'm_selling_staffs'テーブルに' pos_id'を置く必要があります。そして、あなたの関係に従って 'm_position'を参照してください。 – Sravan

答えて

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 
+0

これはそのトリックでした。おかげでたくさん –

+0

あなたを助けてうれしい、良い一日を。 :-) – Sravan

0

を使用し、事前に感謝は以下

@sellers.first.m_position.pos_short_name 

これはpos_short_nameはm_positionモデル

+0

@ sellers.first.m_positionは存在しないことを意味します。 –

0

であるため、あなたが関係をBELONGS_TOする :foreign_key => 'emp_pos_id' を移動する必要があります。