Rails 4 应用程序中的弃用警告(Hartl 教程)
Deprecation warning in Rails 4 application (Hartl Tutorial)
我正在学习 Michael Hartl 的 Rails 教程,当我 运行 我的测试套件时,我看到这样的错误:
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
...任何人都可以澄清此警告试图告诉我的内容吗?
您的数据库似乎有一些 boolean
类型的列,这意味着它们的值被限制为 true
或 false
。根据弃用警告,您在 User
模型和 users_controller
中对 update_attributes
和 update_attribute
的调用将这些属性的值设置为不同于 true
或 false
(尽管它无论如何都会被转换为这两个选项之一)。
只要您按照教程进行操作,似乎就没有什么可担心的:您已经被警告过将不同值转换为 true
或 false
的算法正在进行中将在即将发布的 Rails
.
版本中更改
虽然 Hartl 的教程可能有点过时,但看到那些类型转换对我来说还是有点奇怪。您可能需要仔细检查您的 schema.rb
和迁移文件以及书中列出的文件,以确保您的设置绝对正确。
事实证明,我用于创建测试用户的 YAML 文件中存在错误。
lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('password') %>
activated: true,
activated_at: <%= Time.zone.now %>
...请注意 activated:
行末尾那个讨厌的逗号。这意味着我实际上并没有将值设置为布尔值 true
(猜测它认为它是 5 个字符的字符串?)。
通过将 YAML 更正为
lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('password') %>
activated: true
activated_at: <%= Time.zone.now %>
...(activated
行末尾没有逗号)错误消失了。
我正在学习 Michael Hartl 的 Rails 教程,当我 运行 我的测试套件时,我看到这样的错误:
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
...任何人都可以澄清此警告试图告诉我的内容吗?
您的数据库似乎有一些 boolean
类型的列,这意味着它们的值被限制为 true
或 false
。根据弃用警告,您在 User
模型和 users_controller
中对 update_attributes
和 update_attribute
的调用将这些属性的值设置为不同于 true
或 false
(尽管它无论如何都会被转换为这两个选项之一)。
只要您按照教程进行操作,似乎就没有什么可担心的:您已经被警告过将不同值转换为 true
或 false
的算法正在进行中将在即将发布的 Rails
.
虽然 Hartl 的教程可能有点过时,但看到那些类型转换对我来说还是有点奇怪。您可能需要仔细检查您的 schema.rb
和迁移文件以及书中列出的文件,以确保您的设置绝对正确。
事实证明,我用于创建测试用户的 YAML 文件中存在错误。
lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('password') %>
activated: true,
activated_at: <%= Time.zone.now %>
...请注意 activated:
行末尾那个讨厌的逗号。这意味着我实际上并没有将值设置为布尔值 true
(猜测它认为它是 5 个字符的字符串?)。
通过将 YAML 更正为
lana:
name: Lana Kane
email: hands@example.gov
password_digest: <%= User.digest('password') %>
activated: true
activated_at: <%= Time.zone.now %>
...(activated
行末尾没有逗号)错误消失了。