2011-03-09 61 views
0

我有兩種模型。模型不會創建,因爲在Rails中找不到ID

class User 
    has_one :spec, :dependent => :destroy 

    # returns true for a duplicat record 
     def duplicate? 
     user = User.find_by_email(email) 
     self.id = user.id unless user.nil? 
     not user.nil? 
     end 


    class Spec 
    belongs_to :user 

    validate_uniqueness_of :user_id 

Controller 

if @user.duplicate? || @user.save 

@user.create_spec(:birthdate => params[:user][:deliver_on]) 

end 

這將產生以下錯誤:

ActiveRecord::StatementInvalid in BoardController#new 

Mysql::Error: Column 'user_id' cannot be null: INSERT INTO `specs` (`created_at`, `birthdate`, `updated_at`, `avatar`, `gender`, `user_id`, `last_name`, `first_name`, `picture`) VALUES('2011-03-09 05:43:46', NULL, '2011-03-09 05:43:46', '../images/default_avatar.jpg', NULL, NULL, '', '', NULL) 

但是,如果我這樣做:

@user.create_spec(:user_id => @user, :birthdate => params[:user][:deliver_on]) 

它的作品!

我以爲做@ user.create_spec會自動提供user_id。

無論如何,使這項工作的方式應該是? 我很欣賞任何反饋。 感謝

+0

接受一些你的答案,然後人們會幫助你。 – s84 2011-03-09 05:51:57

回答

0

我認爲你有錯誤的做法。 根據你,

 
class User 
    has_one :spec 
end 

但是,你正在創建重複的用戶另一個規範。 所以我建議下面的鏈接。

http://www.hackerdude.com/2005/11/28/one-to-one-relationships-with-rails/

+0

Thans Ashish。我已經將控制器操作更改爲您所建議的文章中的控制器操作,並且效果很好。 Plus更有意義。 – chell 2011-03-09 06:53:23