优雅地在has_many上设置连接表属性:association

时间:2015-08-13 07:43:32

标签: ruby-on-rails ruby ruby-on-rails-3 activerecord

在我的Rails 3.2应用中Users可以创建Collections ArticlesCollectionsArticleshas_many through: collections_articles关系加入。

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

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)

谢谢!

1 个答案:

答案 0 :(得分:1)

模型层本身没有current_user的知识,所以你必须以某种方式从控制器层传递它。

我能提出的最优雅的解决方案是在add_article模型中创建Collection - 方法:

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

..并从控制器调用