Ruby on rails Rails:从新记录中的变量定义默认值

Ruby on rails Rails:从新记录中的变量定义默认值,ruby-on-rails,ruby-on-rails-3,activerecord,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') @测试显示了我想要的一切: <the-page-id&g

我想用一些默认值创建一个新记录

@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')
@测试显示了我想要的一切:

<the-page-id>, slug: mrs-test, title: Mrs. Test 
,slug:mrs-test,标题: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>  
#@frame.inspect:
#  
谁能解释一下为什么它不带一些变量?字符串“default”以及
@fb\u page['name']
都可以通过


提前谢谢

当您没有在模型的
attr\u accessible
部分下列出这些属性时,通常会发生这种情况

attr_accessible :fb_page_id, :slug, :title, :theme
Rails必须防止恶意用户大量分配某些模型属性。因此,当您将属性传递给
Model.new()
方法时,唯一将持续存在的属性将是
attr\u accessible
中列出的属性(除非您尚未保护您的模型)

如果要保持这些属性受保护(与当前一样),则需要使用点符号设置这些属性:

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

当您没有在模型的
attr\u accessible
部分下列出这些属性时,通常会发生这种情况

attr_accessible :fb_page_id, :slug, :title, :theme
Rails必须防止恶意用户大量分配某些模型属性。因此,当您将属性传递给
Model.new()
方法时,唯一将持续存在的属性将是
attr\u accessible
中列出的属性(除非您尚未保护您的模型)

如果要保持这些属性受保护(与当前一样),则需要使用点符号设置这些属性:

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

令人惊叹的!你太好了!这正是重点!我的slug最初命名为“unique_name”,它在attr_accessible列表中。谢谢!也很高兴知道我会用点表示法。因为我认为我可以分配所有属性,但不能从“外部”分配。谢谢令人惊叹的!你太好了!这正是重点!我的slug最初命名为“unique_name”,它在attr_accessible列表中。谢谢!也很高兴知道我会用点表示法。因为我认为我可以分配所有属性,但不能从“外部”分配。谢谢