Rails:在新记录中定义变量的默认值

时间:2012-01-02 18:37:08

标签: ruby-on-rails ruby-on-rails-3 activerecord

我想发布一个带有一些默认值的新记录。

@test = "#{@fb_page['id']}, slug: #{slug}, title: #{@fb_page['name']}"
@frame = Frame.new(:fb_page_id => @fb_page['id'].to_i, :slug => slug, :title => @fb_page['name'], :theme => 'default')

@test显示我想要的一切:

<the-page-id>, slug: mrs-test, title: Mrs. Test 

但@frame的一些默认值是nil!

# @frame.inspect: 
#<Frame id: nil, slug: nil, title: "Mrs. Test", theme: "default", fb_page_id: nil, created_at: nil, updated_at: nil>  

有人可以解释一下为什么不采取一些变数吗?字符串“default”通过以及@fb_page['name']

提前致谢!

1 个答案:

答案 0 :(得分:5)

当您未在模型的attr_accessible部分下列出这些属性时,通常会发生这种情况。

attr_accessible :fb_page_id, :slug, :title, :theme

Rails有mass-assignment protection来阻止恶意用户批量分配某些模型属性。因此,当您将属性传递给Model.new()方法时,唯一将保留的属性将是attr_accessible中列出的属性(除非您尚未保护模型)。

如果您希望保护这些属性(就像当前一样),您需要使用点表示法设置这些属性:

@frame = Frame.new
@frame.fb_page_id = @fb_page['id'].to_i
@frame.slug = slug
@frame.title = @fb_page['name']
@frame.theme = 'default'