[英]Rake task to assign default values to hash throwing error
我在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}>
我寫了一個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
但是當我運行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
'
請幫助我解決此錯誤。
在此處查看評論: http : //apidock.com/rails/ActiveRecord/Base/update_all/class
如果使用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.