belongs_to с: сбои опции class_name

Я понятия не имею, что пошло не так, как надо, но я не могу получить работу belongs_to с: опция class_name. Мог кто-то просвещать меня.Большое спасибо!

Вот надрез из моего кода.

class CreateUsers < ActiveRecord::Migration
    def self.up
        create_table :users do |t|
            t.text :name
        end
    end

    def self.down
        drop_table :users
    end
end

#####################################################

class CreateBooks < ActiveRecord::Migration
    def self.up
        create_table :books do |t|
            t.text :title
            t.integer :author_id, :null => false
        end
    end

    def self.down
        drop_table :books
    end
end

#####################################################

class User < ActiveRecord::Base
    has_many: books
end

#####################################################

class Book < ActiveRecord::Base
    belongs_to :author, :class_name => 'User', :validate => true
end

#####################################################

class BooksController < ApplicationController
    def create
        user = User.new({:name => 'John Woo'})
        user.save
        @failed_book = Book.new({:title => 'Failed!', :author => @user})
        @failed_book.save # missing author_id
        @success_book = Book.new({:title => 'Nice day', :author_id => @user.id})
        @success_book.save # no error!
    end
end

среда:

рубиновые 1.9.1-p387 направляющие 2.3.5

27
задан crackpot 21 April 2010 в 16:45
поделиться

2 ответа

class User < ActiveRecord::Base
  has_many :books, :foreign_key => 'author_id'
end

class Book < ActiveRecord::Base
  belongs_to :author, :class_name => 'User', :foreign_key => 'author_id', :validate => true
end

Лучше всего изменить вашу миграцию и изменить author_id - user_id . Затем вы можете удалить параметр : foreign_key .

61
ответ дан 28 November 2019 в 04:36
поделиться

Он должен быть

belongs_to :user, :foreign_key => 'author_id'

, если ваш внешний ключ является идентификатором автора. Поскольку у вас действительно есть класс User, ваша Книга должна принадлежать_to: user.

7
ответ дан 28 November 2019 в 04:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: