传递给.build()的属性不会显示在查询中

时间:2010-12-27 14:50:43

标签: activerecord ruby-on-rails-3

希望你们都享受你的冬日。

在尝试将行插入到一个非常简单的数据库表时,我遇到了一个非常有趣的问题 基本想法很简单。用户在多选中选择一个/多个用户,这些用户应该被添加到组中。

这段代码会在user_group_relationships表中插入一行,但用户ID总是

   @group = Group.find(params[:group_id])

   params[:newMember][:users].each do |uid|
      # For debugging purposes.
      puts 'Uid:'+uid

      @rel = @group.user_group_relationships.build( :user_id => uid.to_i )          
      @rel.save 

    end

用户ID总是以null显示,即使它显然在那里。你可以看到这个例子中的uid是5,所以它应该可以工作。

  

发表于:5
  ...
  SQL(0.3ms)INSERT INTO   “user_group_relationships”   (“created_at”,“group_id”,   “updated_at”,“user_id”)VALUES   ('2010-12-27 14:03:24.331303',2,   '2010-12-27 14:03:24.331303',NULL)

为什么会失败的任何想法?

2 个答案:

答案 0 :(得分:1)

user_id模型中的attr_accessible似乎不是UserGroupRelationship

您可能还想查看this它可能是相关的。

答案 1 :(得分:1)

我认为@ zabba的答案可能就是你需要寻找的答案,但我会在这里提出一些额外的建议。

您的“群组”和“用户”模型通过“UserGroup”模型相互连接。你会有关系

class Group < ActiveRecord::Base
  has_many :user_group_relationships
  has_many :users, :through => :user_group_relationships
end

class UserGroupRelationship < ActiveRecord::Base
  belongs_to :group
  belongs_to :user
end

在您的控制器中

# Find the group
@group = Group.find(params[:group_id])

# For each user id, find the user and add the user_group_relationship
params[:newMember][:users].each{|u| @group.users << User.find(u) }

阅读关于关联的Rails文档以及定义关联时自动生成的方法。通常,与协会合作比您想象的更容易!我经常在Rails中发现新的API!祝你好运!