在has_many关系表中设置属性

时间:2013-12-16 11:12:03

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

我有一个Group和一个User,它们通过has_many: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 method status'

我对Groupuser的架构看起来像这样:(我试过没有ID,也无济于事)

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

尝试 @ group.groupusers.status = 1

@ group.save!