我想发布一个带有一些默认值的新记录。
@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']
。
提前致谢!
答案 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'