简体   繁体   English

耙任务为散列抛出错误分配默认值

[英]Rake task to assign default values to hash throwing error

I have a serialized attribute preferences inside the model User which looks like this : 我在User模型中有一个序列化的属性首选项,如下所示:

user.preferences
=> 
 @allow_fans=true,
 @approvals={:email=>true, :message=>false},
 @comment_on_an_item={:email=>false, :message=>true},
 @community_invitations={:email=>true, :message=>true},
 @community_requests={:email=>true, :message=>true},
 @flags={:email=>true, :message=>true},
 @follows={:email=>false, :message=>true},
 @likes_and_shares={:email=>false, :message=>true},
 @make_my_email_visible=true,
 @trackbacks_pingbacks={:email=>true, :message=>false}>

I have written a rake task to assign default preferences hash to existing users like below 我写了一个rake任务,将默认的首选项哈希分配给现有用户,如下所示

namespace :user_preferences do
  desc "set default preferences for existing users"
  task :pref_defaults => :environment do
    default = {:comment_on_an_item => {'email' => nil, 'message' => true},
      :likes_and_shares => {'email' => nil, 'message' => true},
      :flags => {'email' => true, 'message' => true},
      :trackbacks_pingbacks => {'email' => true, 'message' => nil},
      :community_invitations => {'email' => true, 'message' => true},
      :approvals => {'email' => nil, 'message' => true},
      :community_requests => {'email' => true, 'message' => true},
      :follows => {'email' => nil, 'message' => true}}

    User.update_all(:preferences => default)
  end
end

But when I run the rake task rake user_preferences:pref_defaults , I get the error 但是当我运行rake任务rake user_preferences:pref_defaults ,出现错误

** Invoke user_preferences:pref_defaults (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute user_preferences:pref_defaults
rake aborted!
PG::Error: ERROR:  syntax error at or near "'---
- :likes_and_shares
- email: 
  message: true
'"
LINE 5: ','---
          ^
: UPDATE "users" SET "preferences" = '---
- :comment_on_an_item
- email: 
  message: true
','---
- :likes_and_shares
- email: 
  message: true
','---
- :flags
- email: true
  message: true
','---
- :trackbacks_pingbacks
- email: true
  message: 
','---
- :community_invitations
- email: true
  message: true
','---
- :approvals
- email: 
  message: true
','---
- :community_requests
- email: true
  message: true
','---
- :follows
- email: 
  message: true
'

Kindly help me to get through this error. 请帮助我解决此错误。

see comments here: http://apidock.com/rails/ActiveRecord/Base/update_all/class 在此处查看评论: http : //apidock.com/rails/ActiveRecord/Base/update_all/class

If you use update_all to change an attribute marked as serialized ( using ActiveRecord::Base.serialize ), you need to call to_yaml yourself: 如果使用update_all更改标记为序列化的属性(使用ActiveRecord :: Base.serialize),则需要自己调用to_yaml

User.update_all({ :preferences => { :first_name => ‘John’, :last_name  => 'Doe' }.to_yaml })

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM