Asked Nov 25th, 2018 1:48 AM 230 0 1
  • 230 0 1
0

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

Share
  • 230 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 ANSWERS


Answered Nov 25th, 2018 3:09 AM
Accepted
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

Share
Hoàng Đức Quân @devil_boom_129
Nov 25th, 2018 5:00 AM

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

0
| Reply
Share
Hoàn Kì @HoanKi
Nov 25th, 2018 6:30 AM

@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

+1
| Reply
Share
Hoàng Đức Quân @devil_boom_129
Nov 25th, 2018 6:46 AM

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

0
| Reply
Share
Hoàn Kì @HoanKi
Nov 25th, 2018 9:57 AM

@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
+1
| Reply
Share