我有一个用户和组表。在用户表中我有id,name。在组表中,我有id group_name,created_by,user_id。在这里,用户可以属于多个组,但不能属于同一组两次。一个组可以拥有许多用户,但不能使用同一个用户两次。
这是我的代码。
module Client
class Group < ActiveRecord::Base
has_many :users
end
end
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字段设为外键。
答案 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