2011-11-28 103 views
0

我有一個用戶模型has_one後模型,belongs_to用戶。通過before_save回調,我想創建一個(實際上是多個,但這是另一個問題)空(或更好,默認喜歡說「這是我的第一篇文章」)Post,每當有新用戶註冊時。但下面的功能:無法在其關聯的模型中創建模型

def create_post 
    @post = Post.new(params[:post]) 
    @post.user = self 
    @post.save 

給出了一個錯誤:

未定義的局部變量或方法`PARAMS'爲#

可能的問題是什麼?

回答

0

您無權訪問模型中的參數散列。

你不想在after_save回調中做到這一點,但在after_createbefore_create我會說。

此外,我不明白爲什麼用戶has_one貼......尤其是如果你想創建幾個。

在回調:

  • 如果用戶HAS_ONE:發佈

    self.create_post(default_values_hash)

  • 如果的has_many:帖子

    self.posts.create(default_values_hash)

+0

對,應該有has_many。但爲什麼不before_save?我認爲before&after_create回調會帶來創建孤立帖子的風險,如果某事變壞,並且用戶沒有得到保存。 – barerd

+0

before_save會在每次保存用戶時執行,當你更新它時等等。如果你使用after_create,我認爲用戶沒有被保存是沒有風險的。如果使用before_create,則可以執行'self.posts.build({})'而不是'.create',以便在用戶不在時創建帖子。 – Robin

+0

我看,before_create比我想的要好。只是擴大一點,可以這樣做:self.build_post或self.posts.build({rating =>(5..12).to_a.sample「})得到一個隨機值嗎? – barerd