2013-06-28 18 views
0

我想在我的項目中使用seed.rb文件插入一些默認用戶。我已經執行以下行控制檯:如何調試seeds.rb文件?

rake db:seed 

和被掀翻沒有錯誤,但沒有任何創建的記錄。當我將代碼粘貼到rails控制檯時,再次顯示沒有錯誤。我猜測我在seed.rb文件中做錯了。

這是怎麼我的模型是相關的:


security_user.rb

has_one :security_users_detail, dependent: :destroy 
has_many :security_users_manage_securities 
has_many :security_users_roles, through: :security_users_manage_securities 

security_users_detail.rb

belongs_to :security_user 

security_users_role.rb

has_many :security_users_manage_securities 
has_many :security_users, through: :security_users_manage_securities 

這是我在我的seed.rb文件中的代碼:

users = { 

    Admin: { 

     Information: { 
     email: '[email protected]', 
     password: 'test', 
     password_confirmation: 'test' 
     }, 
     Details: { 
     address: 'Not defined.', 
     city: 'Not defined.', 
     country: 'Not defined.', 
     egn: '0000000000', 
     faculty_number: '', 
     first_name: 'Admin', 
     gender: 'male', 
     gsm: '0000000000', 
     last_name: 'Not defined.', 
     skype: 'Not defined.' 
     }, 
     Roles: %w(Administrator) 
    } 
} 

users.each do |user, data| 

    security_user = SecurityUser.new(data[:Information]) 

    data[:Roles].each { |role| 
    security_user.security_users_manage_securities.build(security_users_role: SecurityUsersRole.find_by_role(role)) 
    } 

    SecurityUser.where(email: security_user.email).first_or_create!(security_user.attributes) 

    security_users_detail = SecurityUsersDetail.new(data[:Details]) 
    security_users_detail.security_user_id = security_user.id 
    SecurityUsersDetail.where(security_user_id: security_users_detail.security_user_id).first_or_create 

end 

回答

0

問題是由以下行引起的其餘的模型屬性,但設置爲零。例如,我有id =>無

然後在我是爲了做以下

SecurityUser.where(email: security_user.email).first_or_create!(security_user.attributes) 

創建只有存在用戶。無論如何,由於id參數不在模型的attr_accessible子句中,因此我無法進行批量分配。

要刪除的哈希我已經做了以下的零值:

SecurityUser.where(email: security_user.email) 
       .first_or_create!(security_user.attributes 
       .delete_if { |key, value| value.nil? }) 
3

seed.rb是一個rake任務,所以你可以使用puts將消息輸出到控制檯。

security_user = SecurityUser.new(data[:Information]) 

,因爲甚至認爲,在新方法中傳遞的哈希只保存電子郵件地址和密碼字段,結果對象是使用創建的:例如,

puts "User name: #{user.name}" 
+0

此外,以幫助你解決問題,它看起來像你調用'new'但從來沒有'save'。 – IAmNaN

+0

是的,我打電話給first_or_create,如果找不到,它將創建一條記錄。如果我在rails控制檯中執行了所有的代碼,將會插入數據庫中的記錄嗎? – gotqn

+0

如果我明白你想要做什麼,我認爲你在'security_user = SecurityUser.new(data [:Information])'中有一個錯誤。數據[:信息]。呈現?是真的嗎? (嘗試使用'puts'。)如果不是,你可能需要'data [:Admin] [:Information]'。 – IAmNaN