Rails多对多创建控制器

时间:2013-01-11 13:56:20

标签: ruby-on-rails ruby many-to-many dropdownbox

并提前感谢此处提供的任何帮助。我实际上是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"}

3 个答案:

答案 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