Rails自定义关系错误has_many和has_one在同一模型中

时间:2018-05-01 13:40:39

标签: ruby-on-rails ruby model migration relation

这是我的关系:

tidyr

关联:

=> user.rb

create_table :decks do |t|
    t.references :user, index: true
    t.string :name

    t.timestamps
end

create_table :users do |t|
    t.references :choosen_deck, index: true, foreign_key: { to_table: :decks }
    t.integer :hp
    t.integer :armor

    t.timestamps
end

=> deck.rb

  has_many :decks, dependent: :destroy
  has_one :choosen_deck, class_name: 'Deck', dependent: :destroy

这是我的迁移,我希望有这种关系:

=> user.choosen_deck

=> user.decks

=> deck.user

但它不起作用,因为我无法保存甲板模型。 你有什么想法吗?

更新:

=>这是跟踪

  belongs_to :user, foreign_key: 'user_id'
  belongs_to :choosen_deck, class_name: 'User'

度过愉快的一天

1 个答案:

答案 0 :(得分:1)

不应该只是:

class Deck < ActiveRecord::Base
  belongs_to :user
end

我不确定你的意图:

belongs_to :choosen_deck, class_name: 'User'

在创建记录方面,我认为您应该能够做到:

user = User.create!(hp: 20, armor: 20)
user.create_choosen_deck!(name: "Deck t")
user.decks.create!(name: "Deck 2")

create_choosen_deckdecks.create是关联声明提供的方法(有关详细信息,请参阅Docs)。如果您使用这些方法,则会自动设置user_id值。

(顺便说一句,它是chosen,而不是choosen。)