2016-06-12 4 views
0

Я работаю через Rails учебник Майкла Hartl и когда я запускаю мой тестовый пакет я вижу ошибки, как это:предупреждение устаревания в Rails 4 приложения (Hartl учебное пособие)

DEPRECATION WARNING: You attempted to assign a value which is not explicitly 
`true` or `false` to a boolean column. Currently this value casts to `false`. 
This will change to match Ruby's semantics, and will cast to `true` in Rails 
5. If you would like to maintain the current behavior, you should explicitly 
handle the values you would like cast to `false`. (called from remember at 
.../RoR_Tutorial/sample_app/app/models/user.rb:28) 

DEPRECATION WARNING: You attempted to assign a value which is not explicitly 
`true` or `false` to a boolean column. Currently this value casts to `false`. 
This will change to match Ruby's semantics, and will cast to `true` in Rails 
5. If you would like to maintain the current behavior, you should explicitly 
handle the values you would like cast to `false`. (called from update at  
...RoR_Tutorial/sample_app/app/controllers/users_controller.rb:40) 

кажется, сердиться на звонки к update_attribute, такие как это:

def remember 
    self.remember_token = User.new_token 
    update_attribute(:remember_digest, User.digest(remember_token)) 
end 

или

def update 
    @user = User.find(params[:id]) 
    if @user.update_attributes(user_params) 
    flash[:success] = 'Profile Updated' 
    redirect_to @user 
    else 
    render 'edit' 
    end 
end 

... может ли кто-нибудь уточнить, что это предупреждение пытается мне сказать?

ответ

0

Так получилось, что у меня была ошибка в моем файле YAML, который использовался для создания моих тестовых пользователей.

lana: 
    name: Lana Kane 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 
    activated: true, 
    activated_at: <%= Time.zone.now %> 

... обратите внимание, что досадную запятую в конце activated: линии. Это означало, что я на самом деле не устанавливал значение для boolean true (угадывая, что это выглядит как строка из 5 символов?).

При коррекции YAML в

lana: 
    name: Lana Kane 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 
    activated: true 
    activated_at: <%= Time.zone.now %> 

... (без запятой в конце строки activated) ошибка уходит.

0

Кажется, что в вашей базе данных есть несколько столбцов типа boolean, что означает, что их значения ограничены true или false. В соответствии с предупреждениями об отказе, ваши звонки в update_attributes и update_attribute в вашей модели User и users_controller устанавливают значения этих атрибутов на что-то отличное от true или false (хотя в любом случае он получает листинг на один из этих двух параметров).

Пока вы следуете учебник, не кажется, ничего беспокоит: вы были предупреждены о том, что algorighm трансформации различных значений true или false собирается изменить в предстоящем выпуске Rails ,

Хотя учебник Hartl может быть немного устаревшим, мне все еще кажется немного странным видеть эти отливки. Возможно, вы захотите дважды проверить свои schema.rb и файлы миграции с приведенными в книге, чтобы убедиться, что ваша установка абсолютно правильная.