在has_many上通过:关联优雅地设置连接表属性

在我的Rails 3.2应用程序中, Users可以创建Articles CollectionsCollectionsArticleshas_many through: collections_articles关系连接。

我希望在将Article添加到Collection时将user_id存储在collections_articles连接表中。 (因此该应用程序可以稍后显示谁将文章添加到集合中)。 有一种优雅的方式来做到这一点?

 class CollectionsArticle collection_id article_id user_id belongs_to :collection belongs_to :article belongs_to :user 

当用户将文章添加到集合中时,我只想使用铲子,因此:

  my_collection.articles << my_article 

无论如何(优雅地)同时将连接表的user_id设置为current_user ? 或者是在连接表本身中显式创建记录的最佳方法:

  CollectionsArticle.create(article: @article, collection: @collection, user: current_user) 

谢谢!

模型层本身没有current_user knwoledge,因此您必须以某种方式从控制器层传递它。

我能想到的最优雅的解决方案是在Collection模型中创建一个add_article -method:

 def add_article(article, by_user) self.collection_articles.create(article: article, user: by_user) end 

..并从控制器调用它