【问题标题】:Set attribute in has_many relation table在 has_many 关系表中设置属性
【发布时间】:2013-12-16 19:18:48
【问题描述】:

我有一个Group 和一个User,它们通过 has_many :through 关系关联。我的 :through 表称为Groupuser。该表有一个 group_id、user_id 和一个状态。在创建我的组时,我会让将 current_user 的状态设置为 1(默认为 0)。

在我的组中设置 current_user 一点问题都没有,而且效果很好;它的状态我无法弄清楚。这就是我现在拥有的:

  def create
    @group = Group.new(group_params)
    respond_to do |format|
      if @group.save
        @group.users << current_user
        @group.groupusers.status << 1
        format.html { redirect_to @group, notice: 'done' }
        format.json { render action: 'show', status: :created, location: @group }
      else
        format.html { render action: 'new' }
        format.json { render json: @group.errors, status: :unprocessable_entity }
      end
    end
  end

以上代码抛出错误:undefined methodstatus' for #`

我的 Groupuser 架构如下所示:(我也尝试过不使用 ID,但无济于事)

  create_table "groupusers", force: true do |t|
    t.integer "group_id"
    t.integer "user_id"
    t.integer "status",   default: 0
  end

【问题讨论】:

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


    【解决方案1】:

    @group.groupusers 是一个数组,activerecord 关系。你不能设置这样的属性,你需要一个一个地设置它或者在你将它附加到组之前。

    @group.groupusers.each do |gu|
      gu.status = 1
      gu.save
    end
    

    groupuser = GroupUser.new user_id: current_user.id, status: 1
    @group.groupusers << groupuser
    

    【讨论】:

      【解决方案2】:

      试试 @group.groupusers.status = 1

      @group.save!

      【讨论】:

      • 这是否只计入我即将添加的用户?
      • 顺便遇到了这个错误:undefined method status' for #<:associations::collectionproxy>`
      • 哦,对了,我的错。很高兴@MurifoX 能够为您提供有效的解决方案。
      • 感谢您的努力!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多