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

BBQ*_*hef 1 activerecord ruby-on-rails ruby-on-rails-3

我想用一些默认值发起一个新记录.

@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')
Run Code Online (Sandbox Code Playgroud)

@test显示我想要的一切:

<the-page-id>, slug: mrs-test, title: Mrs. Test 
Run Code Online (Sandbox Code Playgroud)

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

# @frame.inspect: 
#<Frame id: nil, slug: nil, title: "Mrs. Test", theme: "default", fb_page_id: nil, created_at: nil, updated_at: nil>  
Run Code Online (Sandbox Code Playgroud)

谁能解释一下为什么它不采取一些变量?字符串"default"也可以通过@fb_page['name'].

提前致谢!

iwa*_*bed 5

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

attr_accessible :fb_page_id, :slug, :title, :theme
Run Code Online (Sandbox Code Playgroud)

Rails具有批量分配保护功能,可防止恶意用户批量分配某些模型属性.因此,当您将属性传递给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'
Run Code Online (Sandbox Code Playgroud)