Seed dữ liệu trong Rails bị lỗi kiểu dữ liệu
Mình hiện đang có 1 project Rails và cần seed. Đây là code file seed của mình
# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
# cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
# Mayor.create(name: 'Emanuel', city: cities.first)
Room.destroy_all
User.destroy_all
20.times do
User.create([
username: Faker::Name.name,
fullname: Faker::Name.name,
email: Faker::Internet.email,
password: '123456789',
password_confirmation: '123456789',
user_pic: 'profile-pictures/default-user-blank.jpg',
])
end
100.times do
Room.create([
user_id: User.ids.sample,
room_name: Faker::NatoPhoneticAlphabet.code_word,
address: Faker::Address.full_address,
cost_per_night: 3000,
type_of_room: 1,
num_of_baths: 1,
num_of_guests: 1,
num_of_bedrooms: 2,
num_of_beds: 5,
amentities: 'Wifi',
contact_host: Faker::PhoneNumber.phone_number,
pictures: 'rooms/room1.jpg',
room_info: "Lorem",
])
end
Và khi chạy xong thì có thông báo này
Mình vẫn không biết gỡ lỗi này như thế nào. Mọi người có thể giúp mình được không? Đây là project: https://github.com/BlazingRockStorm/JungleBoys_Liquid
1 CÂU TRẢ LỜI
Trong model Room.rb bạn có dùng serialize :pictures, JSON
https://github.com/BlazingRockStorm/JungleBoys_Liquid/blob/master/app/models/room.rb#L11
Nên bạn thử sửa pictures: 'rooms/room1.jpg',
thành kiểu mảng xem có được không ?
pictures: ['rooms/room1.jpg'],
Note: Rails 5.2 mới bổ sung tính năng Active Storage, bạn có thể đính kèm bất cứ tệp gì vào mỗi bản ghi, sẽ tiện lợi hơn đó, dự án mình đang làm cũng sử dụng. https://edgeguides.rubyonrails.org/active_storage_overview.html
Em sửa thì bị trả thông báo null cả trường
- Bạn seed với carrierware thì cần làm như này:
Room.create!([
user_id: User.ids.sample,
room_name: Faker::NatoPhoneticAlphabet.code_word,
address: Faker::Address.full_address,
cost_per_night: 3000,
type_of_room: 1,
num_of_baths: 1,
num_of_guests: 1,
num_of_bedrooms: 2,
room_info: "1",
num_of_beds: 5,
amentities: 'Wifi',
contact_host: Faker::PhoneNumber.phone_number,
pictures: File.open(Rails.root + "app/assets/images/rooms/room1.jpg"),
])
-
File seed.rb của bạn đang còn thiếu trường
room_info: "1"
nhé. -
Sửa thành
mount_uploader :pictures, RoomImageUploader
-
Validate đang lỗi, mình tạm comment lại
def validate_photo_quota
# return unless self.user
# if self.pictures.count > 5
# errors.add(:error, "Over quota")
# end
end
Và đây là kết quả:
@HoanKi em cảm ơn ạ. ok rồi ạ
@devil_boom_129 Hoặc cách này xem có ngắn hơn ko bạn nhé !
Rails.root.join("app/assets/images/project/default_logo.png").open