Yêu cầu Nov 25th, 2018 1:48 a.m. 316 0 1
  • 316 0 1
0

Seed dữ liệu trong Rails bị lỗi kiểu dữ liệu

Chia sẻ
  • 316 0 1

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


Đã trả lời Nov 25th, 2018 3:09 a.m.
Đã được chấp nhận
0

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

Chia sẻ
Avatar Hoàng Đức Quân @devil_boom_129
Nov 25th, 2018 5:00 a.m.

Em sửa thì bị trả thông báo null cả trường

Avatar Bamboo @HoanKi
Nov 25th, 2018 6:30 a.m.

@devil_boom_129

  1. 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"),
      ])
  1. File seed.rb của bạn đang còn thiếu trường room_info: "1" nhé.

  2. Sửa thành mount_uploader :pictures, RoomImageUploader

  3. 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ả: Sreenshot from 2018-11-25 13-34-05.png

Avatar Hoàng Đức Quân @devil_boom_129
Nov 25th, 2018 6:46 a.m.

@HoanKi em cảm ơn ạ. ok rồi ạ

Avatar Bamboo @HoanKi
Nov 25th, 2018 9:57 a.m.

@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
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí