新手问题 请教 rails 中 model 中 has_many through 关联中, 是否获取和设置中间表的 API

ji.menbi · 发布于 2017年06月01日 · 最后由 ji.menbi 回复于 2017年06月05日 · 258 次阅读
96
class Author 
  has_many :articles, through: :autor_articles_association
  has_many :author_articles_associations
end

class AuthorArticleAssociation
  belongs_to :author
  belongs_to :article
end

class Article
  has_many :authors, through: :autor_articles_association
  has_many :author_articles_associations
end

现在假设,AuthorAritleAssociation的model里面有一个column: some_attribute
问题:
1.现在有实例 author 和 article, 那么 在类似 author << article 这种操作过程中, 能设置中间表的some_attribute属性。类似于这类函数author.add_articles(article: article, some_attribute: "value")
2.在完成关联的情况下,是否有类似函数author.author_articles_associations_with(article)
感谢

共收到 8 条回复
96

都寫這樣😫

aa = AuthorArticleAssociation.new
aa.some_attribute = value
aa.author = author
aa.article = article
96
32hong_xin 回复

额 好吧 难道没有更“优雅”一点的方式了么。。。

96

縮成一行還是沒有比較優雅...

AuthorArticleAssociation.new(author: author, article: article, some_attribute: value)

求其他人提點不直接操作中間表的方法

96
32hong_xin 回复

其实 更多的时候这类的应用场景是从Author出发 添加一个Article。中间表在调用中,应该是需要成为一个完全透明的中间层,仅仅提供两者之间的关联属性
所以 总感觉 这种方式太过“丑陋”......不符合rails的风格,如果没有的话

96
32ji.menbi 回复

包進Model的method中

class Author 
  def add_article(article: nil, some_attribute: nil)
    author_articles_associations.new(article: article, some_attribute: some_attribute)
  end
end

就能這樣用了

author.add_article(article: article, some_attribute: "value")
96
32hong_xin 回复

嗯 只能这样了

96

用回调被!

96
32liuyang_1991 回复

也是一个思路,但是如何解决传参的问题
毕竟中间model的参数是与关联的model相关的,就代表说,中间层的属性很可能无法从它关联的两个record中获取,需要由调用者赋值。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册