将数据插入外键列

时间:2016-01-30 06:41:46

标签: ruby-on-rails activerecord

我有一个用户和组表。在用户表中我有id,name。在组表中,我有id group_name,created_by,user_id。在这里,用户可以属于多个组,但不能属于同一组两次。一个组可以拥有许多用户,但不能使用同一个用户两次。

这是我的代码。

group.rb

module Client
  class Group < ActiveRecord::Base
    has_many :users
  end
end

user.rb

class User < ActiveRecord::Base
  belongs_to :client_groups
end

现在,当用户创建新组时,他应该自动持久保存到user_id和created_by字段中。 因此,根据guides,我尝试使用我的代码(例如

@user.Client::Group.new(client_group_params)

但它给了我一个错误。

所以我尝试了另一种方式,

def create
      @client_group = Client::Group.new(client_group_params)
      client_group_params[:created_by] = current_user.id
      client_group_params[:users_id] = current_user.id
      @client_group.save
      respond_with(@client_group)
    end

def client_group_params
      params.require(:client_group).permit(:group_name)
    end

它将group_name保存到数据库中,但它没有保存created_by和users_id字段。有什么想法吗?

我已经将user_id字段设为外键。

1 个答案:

答案 0 :(得分:2)

首先,您需要更改下面的声明声明:

class User < ActiveRecord::Base
  belongs_to :client_group,
    class_name: 'Client::Group',
    foreign_key: :group_id
end

根据您的关联,User模型应该包含名为group_id的列。通过迁移添加它。我没有看到将user_id添加到Group模型的重点。

然后将create操作更改为:

def create
  @client_group = current_user.build_client_group(
    client_group_params.merge(created_by: current_user.id)
   )
  @client_group.save
  respond_with(@client_group)
end