Ich habe zwei Modelle MSellingStaff
und MPosition
Rails 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 binundefinierten 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
„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 –
@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' –
Sie sollten 'pos_id' in' m_selling_staffs' Tabelle haben und es sollte sich auf 'm_position' beziehen, entsprechend Ihrer Relation – Sravan