2017-01-23 7 views
1

Ich habe zwei Modelle MSellingStaff und MPositionRails eager loading Verbände

#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 

Ich habe ein Attribut pos_short_name in m_position. Wenn ich versuche,

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

Ich erhalte

nicht definierte Methode `pos_short_name‘ für #MSellingStaff: 0x0000000651a5d0

und wenn ich versuche,

@sellers.first.m_position.pos_short_name 

ich

immer bin

undefinierten Verfahren `pos_short_name‘ für nil: NilClass

in den Schienen-Konsole kann ich sehen, dass die SQL für

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

ist

MSellingStaff Load (0.6ms erzeugten) SELECT "m_selling_staffs". * FROM "m_selling_staffs" MPositionslast (0,2 ms) SELECT "m_position". * FROM "m_position" WHERE "m_positi auf "." pos_id "IN ('')

Was mache ich falsch? Vielen Dank im Voraus

+0

„nicht definierte Methode' pos_short_name‘für Null: NilClass“ zeigt an, dass @ sellers.first.m_position null ist - mit anderen Worten, Sie Instanzen von MSellingStaff haben, die nicht ein zugehöriges mPosition –

+0

@DavidAldridge haben das ist Seltsam, alle Werte in 'emp_pos_id' Spalte von' m_selling_staffs' sind dort in 'pos_id' Spalte von' m_position' –

+0

Sie sollten 'pos_id' in' m_selling_staffs' Tabelle haben und es sollte sich auf 'm_position' beziehen, entsprechend Ihrer Relation – Sravan

Antwort

2

Versuchen Sie, die foreign_key und class_name zu MSellingStaff Modell hinzuzufügen.

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

Das hat den Trick gemacht. Vielen Dank –

+0

Froh, Ihnen zu helfen, einen schönen Tag zu haben. :-) – Sravan

0

die unten Diese

@sellers.first.m_position.pos_short_name 

verwenden, da pos_short_name in m_position Modell ist

+0

Es bedeutet, dass @ sellers.first.m_position nicht existiert –

0

Sie :foreign_key => 'emp_pos_id' belongs_to Beziehung bewegen sollen.