Rails: определение значений по умолчанию из переменной в новой записи - PullRequest
1 голос
/ 02 января 2012

Я хотел бы начать новую запись с некоторыми значениями по умолчанию.

@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>  

Может кто-нибудь объяснить, почему он не принимает некоторые переменные?Строка «по умолчанию» проходит через @fb_page['name'].

Заранее спасибо!

1 Ответ

5 голосов
/ 03 января 2012

Обычно это происходит, когда вы не перечисляете эти атрибуты в разделе attr_accessible модели.

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

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...