ฉันค้นพบปัญหานี้เมื่อใช้งาน omniauth-facebook ในแอปพลิเคชันของฉัน ฉันสามารถใช้กราฟแฮชของ Facebook เพื่ออัปเดตชื่อผู้ใช้และอีเมลของพวกเขาได้ แต่ไม่ใช่แอตทริบิวต์รูปภาพ
เมื่อฉันพยายามเปลี่ยนแอตทริบิวต์รูปภาพ (สตริง) ของผู้ใช้ ระบบจะอัปเดตค่าเป็นศูนย์เสมอ:
@user.update_attributes!(photo: "blah")
(0.5ms) BEGIN
SQL (0.7ms) UPDATE "users" SET "photo" = $1, "updated_at" = $2 WHERE "users"."id" = $3 [["photo", nil], ["updated_at", "2016-07-12 20:43:30.322405"], ["id", 31]]
(3.0ms) COMMIT
=> true
ฉันมีโปรแกรมอัปโหลดรูปภาพติดตั้งอยู่กับโมเดล/User.rb ของฉัน:
mount_uploader :photo, PhotoUploader
และนำไปใช้งาน (uploaders/photo_uploader.rb):
class PhotoUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
# Create different versions of your uploaded files:
version :header do
process :resize_to_fill => [150, 150]
end
version :medium do
process resize_to_fill: [100,100]
end
version :micro do
process :resize_to_fill => [30, 30]
end
...
ฉันเชื่อว่า Cloudinary เป็นสาเหตุเพราะฉันสามารถอัปเดตแอตทริบิวต์อื่นๆ ด้วยตนเองได้โดยไม่มีปัญหา ฉันจะลบล้างพฤติกรรมนี้ได้อย่างไร
ด้านล่างนี้คือสิ่งที่ฉันใช้เพื่อตั้งค่า user.photo ตามแฮชการโทรกลับจาก Facebook (ที่ฉันค้นพบปัญหา) แฮชแบบ cloudinary ส่งคืน url เป็นสตริงได้ดี ไม่ใช่ปัญหากับ auth.info.image หรือการตอบกลับการอัปโหลดแบบ cloudinary
def self.from_omniauth(auth)
puts auth
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.email = auth.info.email
user.first_name = auth.info.first_name
cloudinary_hash = Cloudinary::Uploader.upload(auth.info.image)
user.photo = cloudinary_hash["url"]
user.last_name = auth.info.last_name
user.password = Devise.friendly_token[0,20]
end
end