2011-11-28 59 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