【问题标题】:Seeding database rails belongs_to播种数据库 rails belongs_to
【发布时间】:2017-07-14 04:15:14
【问题描述】:

我正在尝试为具有 4 个用户的数据库播种。每个用户都有 has_one 个人资料和 has_many todo_lists。 用户模型:

class User < ActiveRecord::Base
  has_one :profile, dependent: :destroy
  has_many :todo_lists, dependent: :destroy 
  has_many :todo_items, through: :todo_lists, source: :todo_items
end

这是我的种子文件

User.destroy_all

user_list = [
  ["Carly", "Fiorina", "female", 1954],
  ["Donald", "Trump", "male", 1946],
  ["Ben", "Carson", "male", 1951],
  ["Hillary", "Clinton", "female", 1947]
]

user_list.each do |fname, lname, gender, byear|
    {
        User.create!(username: lname, password_digest: "xyz")
        User.profile.create! (first_name: fname, last_name: lname, gender: gender, birth_year: byear )
        User.todo_list.create!(list_name: "temp", list_due_date: 1.year.from_now); 
    }
end

我收到错误意外 tLABEL 指向用户名:lname。我创建用户表的迁移是:

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :username
      t.string :password_digest

      t.timestamps null: false
    end
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby database seed


    【解决方案1】:

    您不应该在 do-end 块中使用方括号。试试这个:

    user_list.each do |fname, lname, gender, byear|
      user = User.create!(username: lname, password_digest: "xyz")
      user.create_profile!(first_name: fname, last_name: lname, gender: gender, birth_year: byear )
      user.todo_lists.create!(list_name: "temp", list_due_date: 1.year.from_now); 
    end
    

    【讨论】:

    • 是的,这是真的,感谢您的捕获。我认为问题可能是我无法通过用户创建个人资料。也许我必须创建一个配置文件,然后将其分配给用户?
    • 您需要从用户实例而不是用户类中创建配置文件和 todo_lists。我已经更新了我的答案以反映这一点。请记住,您的 Profile 和 TodoList 模型应该有一个外键将它们链接回用户。
    • 现在我得到一个 NoMethodError 未定义的方法创建!
    • @leenyburger 我的错! profile.create 不起作用,因为它是 has_one 关系,所以没有配置文件可以调用 create 。正确的方法是create_profile!,我已经更改了答案以反映这一点。
    • 是的!感谢帮助。如果我理解正确,我不能调用 user.profile.create 因为它是 has_one 但我可以调用 user.todo_lists.create 因为它是 has_many。
    猜你喜欢
    • 2011-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 2015-09-25
    • 1970-01-01
    相关资源
    最近更新 更多