并提前感谢此处提供的任何帮助。我实际上是rails开发和stackoverflow的新手。我正在建立多对多的关系,并且遇到一些基础问题。我想要建立用户和群组关系。
型号:
class User < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :groups
end
class Group < ActiveRecord::Base
attr_accessible :name
has_and_belongs_to_many :users
end
db / migrate create_groups_users_join
class CreateGroupsUsersJoin < ActiveRecord::Migration
def self.up
create_table 'groups_users', :id => false do |t|
t.column 'group_id', :integer
t.column 'user_id', :integer
end
end
def self.down
drop_table 'groups_users'
end
end
我使用此代码在用户表单上创建了一个下拉列表。
true})%&gt;
控制器
def edit @user = User.find(params[:id]) @groups = Group.all ... end def new @user = User.new @groups = Group.all ... end
我现在已经失去了添加到控制器以更新创建/编辑/更新的连接表的内容。任何人都可以解释我需要改变什么来实现这一目标吗?谢谢。
这是我现在得到的错误输出:
{"utf8"=>"✓",
"authenticity_token"=>"pgyajCT23qQVMuS+MQgG6E7M7Q8AWjfGaYbe3q7QDSA=",
"group"=>{"group_id"=>"1"},
"user"=>{"name"=>"ymudfg"},
"commit"=>"Create User"}
答案 0 :(得分:3)
您可以在控制器中执行此操作,将用户添加到组:
user = User.find(params[:uid])
group = Group.find(params[:gid])
group.users << user #Adding user to group
将组分配给用户:
user.groups << group
编辑:根据你的评论
class UsersController < ApplicationController
def new
@user = User.new
@group = Group.all
end
def create
@user = User.new(params[:user])
@group = Group.find(params[:group][:group_id]) # As per log
if @user.save
@group.users << @user
else
render :new
end
end
#Similarly you can implement edit
end
答案 1 :(得分:0)
用户和群组之间的关联由rails自动处理,这就是您添加has_and_belongs_to_many
的原因。
如果您想将用户添加到群组,则可以执行以下操作:
@group.users.create(params[:user])
你可以做的另一面:
@user.groups.create(params[:group])
查找您可以执行的用户组:
@user.groups.find(params[:id])
答案 2 :(得分:0)
现在最好使用:has many through associations而不是has_and_belongs_to_many