Rails has_many: through и настройка свойства в модели Join
Похожий наэтот вопросКак установить свойство в модели соединения непосредственно перед сохранением в этом контексте?
class Post < ActiveRecord::Base
has_many :post_assets
has_many :assets, :through => :post_assets
has_many :featured_images, :through => :post_assets, :class_name => "Asset", :source => :asset, :conditions => ['post_assets.context = ?', "featured"]
end
class PostAssets < ActiveRecord::Base
belongs_to :post
belongs_to :asset
# context is so we know the scope or role
# the join plays
validates_presences_of :context
end
class Asset < ActiveRecord::Base
has_many :post_assets
has_many :posts, :through => :post_assets
end
Я просто хочу быть в состоянии сделать это:
@post = Post.create!(:title => "A Post")
@post.featured_images << Asset.create!(:title => "An Asset")
# ...
@post = Post.first
@featured = @post.featured_images.first
#=> #<Asset id: 1, title: "An Asset">
@featured.current_post_asset #=> #<PostAsset id: 1, context: "featured">
Как это будет работать? Я весь день колотил головой :).
Что в настоящее время происходит, когда я делаю это:
@post.featured_images << Asset.create!(:title => "An Asset")
Тогда модель соединенияPostAsset
то, что создается, никогда не получает шанс установитьcontext
, Как мне установить это свойство контекста? Это выглядит так:
PostAsset.first #=> #<PostAsset id: 1, context: nil>
Обновить:
Я создал тестдрагоценный камень попытаться изолировать проблему. Есть ли более простой способ сделать это ?!
этоActsAsJoinable :: Базовый класс делает так, что вы можете иметь много-много отношений с контекстом между ними в модели соединения. И это добавляет вспомогательные методы. Основатесты показать в основном то, что я пытаюсь сделать. Есть лучшие идеи о том, как сделать это правильно?