2017-01-23 3 views
1

У меня есть две модели 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 

У меня есть атрибут pos_short_name в m_position. Когда я пытаюсь

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

Я получаю

неопределенный метод `pos_short_name» для #MSellingStaff: 0x0000000651a5d0

и когда я пытаюсь

@sellers.first.m_position.pos_short_name 

я получаю

неопределенный метод `pos_short_name» для ноль: NilClass

В консоли рельсы я могу видеть, что SQL генерируется для

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

является

MSellingStaff нагрузки (0.6ms) SELECT «m_selling_staffs». * FROM «m_selling_staffs» Загрузка MPosition (0.2ms) SELECT «m_position». * FROM «m_position» ГДЕ «m_positi» на "." pos_id "IN ('')

Что я делаю неправильно? спасибо заранее

+0

«неопределенный метод' pos_short_name»для ноль: NilClass» указывает на то, что @ sellers.first.m_position равна нулю - другими словами, у вас есть экземпляры MSellingStaff, которые не имеют связанный с ним MPosition –

+0

@DavidAldridge то будет странная вещь, все значения в столбце 'em_p_pos_id'' m_selling_staffs' находятся в столбце 'pos_id'' m_position' –

+0

, вы должны иметь 'pos_id' в таблице' m_selling_staffs', и он должен ссылаться на 'm_position' в соответствии с вашим отношением – Sravan

ответ

2

Попробуйте добавить foreign_key и class_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

Вы должны двигаться :foreign_key => 'emp_pos_id' к BELONGS_TO отношения.

Смежные вопросы