2015-04-11 3 views
0

Я надеюсь, что кто-то может помочь, если я быстро ухожу. У меня есть следующая настройка сверху вниз, и я удалю ложный код. Я хотел бы сохранить полиморфную модель поиска, поскольку rcs_prospecting и ara_prospecting используют поле из этой модели, а также имеют свои собственные поля.Rails 4 полиморфный через ассоциацию

contact.rb

class Contact < ActiveRecord::Base 
    has_one :ara_prospecting 
    has_one :rcs_prospecting 

    .... 
end 

ara_prospecting.rb

class AraProspecting < ActiveRecord::Base 
    belongs_to :contact 
    has_one :prospecting, as: :prospectable 
    accepts_nested_attributes_for :prospecting, :reject_if => :all_blank, :update_only => true 
end 

rcs_prospecting.rb

class RcsProspecting < ActiveRecord::Base 
    belongs_to :contact 
    has_one :prospecting, as: :prospectable 
    accepts_nested_attributes_for :prospecting, :reject_if => :all_blank, :update_only => true 
end 

prospecting.rb

class Prospecting < ActiveRecord::Base 
    belongs_to :prospectable, polymorphic: true 
    belongs_to :user 
end 

То, что я пытаюсь сделать, - создать has_one посредством ассоциации с моделью пользователя из модели контакта через ассоциации ara_prospecting и rcs_prospecting. По сути, я хотел бы

has_one :ara_user, through...(ara_prospecting -> prospecting -> user) 
has_one :rcs_user, through...(rcs_prospecting -> prospecting -> user) 

Я рассмотрел различные статьи и попробовал разные вещи, но, похоже, не мог их взломать.

Любая помощь будет принята с благодарностью.

Спасибо заранее

ответ

0

Вместо использования has_one :through ассоциации, я бы удалить ara_prospecting и rcs_prospecting в целом.

class Contact < ActiveRecord::Base 
    has_many :prospecting 

    .... 
end 

class Prospecting < ActiveRecord::Base 
    belongs_to :contact 

    scope :ara, -> {where(category: "ara")} 
    scope :rcs, -> {where(category: "rcs")} 
end 

В вашей Prospecting миграции, добавьте t.string :category и назначать их либо ara или rcs при создании объектов. Области, которые я определил, позволят вам легко их разделить.

+0

Спасибо за ваше предложение. Поисковая модель представляет собой полиморфную модель, в которой rcs_prospecting и ara_prospecting «inherit», но каждая из этих моделей также имеет свои собственные уникальные поля. Не уверен, что ваше предложение будет работать в этом случае? – Dudedolf

+0

Ну, если модели 'rcs' и' ara' имеют только несколько полей, вы можете просто перенести их в «поисковую» модель. Конечно, у вас всегда будут какие-то «nil» (или, может быть, пустые) значения, но это сработает. Если у них есть куча полей (скажем, 6 или более каждый), объединение их может быть не лучшей идеей. Но в любом случае это сработает. –

+0

Спасибо за помощь. Я хотел бы придерживаться метода в настоящее время, поскольку все это работает очень хорошо, и это также хороший способ изучить различные методы. Ассоциация работает, ссылаясь на нее через каждую модель, но было бы хорошо знать способ иметь прямую связь от контактной модели. еще раз спасибо – Dudedolf

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