【问题标题】:Rails Associations: access join table by console (HABTM)Rails 关联:通过控制台访问连接表 (HABTM)
【发布时间】:2014-09-24 19:50:27
【问题描述】:

使用 Rails 指南中的简单指令,我得到了我想要的 - 拥有并属于许多协会。在控制台中一切正常,但我有点坚持以下内容。

假设我有两个模型 ArticleCategory,它们的模型中都有指令 has_and_belongs_to_many 并且对应于数据库中的articles_categories 表。在 Rails 控制台中,我可以看到关联使用以下语句:

%>   @x = Article.find(1)
%>   @x.categories

这样我就有了一组存储在@x 中的类别。精彩的。但是我真的找不到一种方法,我可以通过控制台“添加”一个新类别。现在,我正在使用 SQL 将值插入到可连接中。我希望有一种更聪明的 Railsy 方式来做这样的事情

%> @x.article.categories.category_id = 1  # id of category
%> @x.article.categories.article_id = 1  # id of article
%> @x.save # and written to the database

我正在专门寻找在 rails 控制台中执行此操作的方法 - 所以我实际上感觉到正在发生的事情,而不是代码 sn-ps 可以工作,但我没有得到。我正在使用 Rails 4.1.6

【问题讨论】:

    标签: ruby-on-rails rails-console


    【解决方案1】:

    您可以简单地添加到categories 集合中,Rails 将管理数据库关系。

    > category = Category.find(1)
    > article = Article.find(1)
    > article.categories << category
    > article.save
    

    这将添加article_id 为1 和category_id 为1 的articles_categories 记录。而且,更好的是,对象将相互了解:

    > article.categories.include?(category) # => true
    > category.articles.include?(article) # => true
    

    【讨论】:

    • 可以这么简单吗?如果这行得通,我宣布你是上帝!
    • 我真的很爱你。
    【解决方案2】:

    你为什么不试试:

    @article.categories.build (params)
    

    params 将包含新类别的属性

    【讨论】:

    • 您不需要设置一个accepts_nested_attributes_for 来执行此操作(并将HABTM 更改为has_many)吗?
    猜你喜欢
    • 2011-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多