【问题标题】:Elegantly set join table attributes on has_many through: association通过:association 在 has_many 上优雅地设置连接表属性
【发布时间】:2015-08-13 07:43:31
【问题描述】:

在我的 Rails 3.2 应用程序中,Users 可以创建 CollectionsArticlesCollectionsArticles 通过 has_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)

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

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

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

    ..并从控制器调用它

    【讨论】:

    • 感谢 axel 的想法!
    猜你喜欢
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多