У меня есть Rails 4.1.7 приложения, где мы имеем users
и themes
:Rails4 метод коррекции has_many геттер
class User < ActiveRecord::Base
has_many :themes
end
class Theme < ActiveRecord::Base
belongs_to :user
end
Теперь пользователь может создавать некоторые собственные темы (то эти темы будут иметь их user_id
набор для пользователя id
), или может использовать любого из предустановленных тем (имеющая user_id
набор для null
)
что я хотел бы сделать это следующим образом: каким-то образом изменить has_many
ассоциации так, что, когда я называю @user.themes
, это принесет мне го e предустановленные темы, а также темы пользователя.
То, что я пробовал:
1) определить метод экземпляра вместо has_many
ассоциации:
class User < ActiveRecord::Base
def themes
Theme.where user_id: [id, nil]
end
end
, но так как я хотел бы хотелось нагружать темы с пользователем (s) (includes(:themes)
), что на самом деле не будет.
2) использовать некоторый объем (has_many :themes, -> { where user_id: nil }
), но он дает запросы mySql, такие как ... WHERE user_id = 123 AND user_id IS NULL
, который возвращает пустой. Я думаю, что с Rails5 я мог бы сделать это с чем-то вроде has_many :themes, -> { or.where user_id: nil }
, но изменение версии Rails сейчас не вариант.
Я думаю, что это плохая идея переписать ассоциацию, потому что 'Тема 'без какого-либо пользователя, указанного на самом деле, принадлежит каждому пользователю (многие пользователи), это не отношение' has_one-has_many'. Я бы рекомендовал использовать другой метод для достижения вашей цели. – Ilya
Да, это то, что я сейчас использую. Только, было бы намного приятнее загружать его иногда ... – Misu