2012-01-02 40 views
1

我想用一些默認值啓動新記錄。Rails:定義新記錄中變量的默認值

@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的默認值是零!

# @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']

在此先感謝!

回答

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' 
+0

真棒!你太好了!這就是要點!我的slu was原名叫'unique_name',它在attr_accessible列表中。非常感謝!也很高興知道我會用點符號來表達它。因爲我認爲我可以分配所有的屬性,但不是來自「外部」。謝謝!!! – 2012-01-02 20:28:37