2011-12-08 32 views
0

的从属表迁移在我的Rails应用程序我有用户模块,它是依赖于model.Both通过user_role_assignment model.i.e整合角色的用户通过用户角色分配相关联的许多角色。在Ruby中创建

我需要生成一个迁移来建立一些默认的用户。 这个问题我一个面向是,如果我尝试创建通过控制台的用户,我得到一个错误说“角色不能为空

u=User.create(:name => "ramyameena", :email => "[email protected]",:password=>"sandvine",:roles=>{:id=>2,:name=>"Tester"}) 
=> #<**User id: nil**, name: "ramyameena", created_at: nil, updated_at: nil, email: "[email protected]", encrypted_password: "$2a$10$qIfRLKZlxviag9E0Gzvp8e3VKkOCaXraP7PnJC6vGMN....", reset_password_token: nil, remember_token: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil> 

irb(main):012:0> u.errors.inspect 
=> "#<OrderedHash **{:roles=>[\"can't be blank\"]**}>" 

我的用户模型。

class User < ActiveRecord::Base 
devise :database_authenticatable, :registerable, 
:recoverable, :rememberable, :trackable, :validatable 
validates :name, :presence => true, :uniqueness => true 
validates :roles, :presence => true 
has_many :user_role_assignments 
has_many :roles, :through => :user_role_assignments 
has_many :tester_release_assignments 
has_many :releases, :through => :tester_release_assignments 
has_many :releases 
has_many :ic_runs 
accepts_nested_attributes_for :user_role_assignments 
attr_accessible :email, :name, :password, :password_confirmation, :role_ids 
+0

http://stackoverflow.com/questions/5916162/problem-with-factory-girl-association-and-after-initialize –

回答

2

你有accepts_nested_attributes_for :user_roles_assignments但在创建要传递角色,不user_roles_assignments。我会确保您不会错过accepts_nested_attributes_for :roles或某种类型的helper方法...

或者,你需要做的RO分开。例如

u = User.new(:name => "ramyameena", :email => "[email protected]",:password=>"sandvine") 
u.roles.build(:id=>2,:name=>"Tester") 
u.save 
+0

非常感谢泰伦用于不厌其烦地先回答我。请帮助使用console命令将用户插入表中。名称=> “ramyameena”:电子邮件=> “[email protected]”:密码=> “Sandvine的”:角色=> {:我试着通过u = User.create(给人的角色值id = > 2,:name =>“Tester”})。但它不起作用。 – ramya

+1

这是因为您没有在用户中定义任何内容,允许您传递':roles'的任何属性。我不知道你的角色是如何设置的。但是你需要'acceptersted_attributes_for:roles'或者你需要分别完成角色。 (见在回答编辑以上) –

+0

喜泰伦,我有3个表,基本上,用户,角色,user_role_assignment.My角色表已经populated.I需要建立一个用户,并通过在user_role_assignment的条目相关联与用户的角色,其有USER_ID和ROLE_ID – ramya