gpt4 book ai didi

ruby-on-rails - rails : Has and belongs to many (HABTM) -- create association without creating other records

转载 作者:行者123 更新时间:2023-12-03 20:15:42 24 4
gpt4 key购买 nike

在谷歌上花了一整天,但找不到答案。 :\

我在用户和 Core_Values 之间有一个 HABTM 关系。

class CoreValue < ActiveRecord::Base
has_and_belongs_to_many :users

class User < ActiveRecord::Base
has_and_belongs_to_many :core_values

在我的 Controller 中,我需要做两件事:
  • 如果 CoreValue 不存在,则创建一个新的并将其与给定的用户 ID 相关联,然后
  • 假设我知道一个特定的 CoreValue 已经存在,创建关联而不创建任何新的 CoreValues 或用户

  • 对于#1,我有这个工作:
    User.find(current_user.id).core_values.create({:value => v, :created_by => current_user.id})

    这将使用 :value 和 :created_by 创建一个新的 CoreValue 并创建关联。

    对于#2,我尝试了一些方法,但似乎不能仅创建关联。

    谢谢你的帮助!

    最佳答案

    您可以使用非常有用的 find_or_create 分两步完成此操作。方法。 find_or_create将首先尝试查找记录,如果它不存在,则创建它。像这样的事情应该可以解决问题:

    core_value = CoreValue.find_or_create_by_value(v, :created_by => current_user.id)
    current_user.core_values << core_value

    一些注意事项:
  • 第一行将查找或创建值 v .如果它不存在并被创建,它将设置created_bycurrent_user.id .
  • 没必要做User.find(current_user.id) ,因为这将返回与 current_user 相同的对象.
  • current_user.core_values是一个数组,您可以使用 << 轻松地为其添加另一个值.

  • 为简洁起见,以下内容与上面的代码示例相同:
    current_user.core_values << CoreValue.find_or_create_by_value(v, :created_by => current_user.id)

    关于ruby-on-rails - rails : Has and belongs to many (HABTM) -- create association without creating other records,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4730493/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com