belongs_to with: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  false end end def self.down drop_table :books end end ##################################################### class User < ActiveRecord::Base has_many: books end ##################################################### class Book  'User', :validate => true end ##################################################### class BooksController  '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 

环境:

ruby 1.9.1-p387 Rails 2.3.5

 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选项。

它应该是

 belongs_to :user, :foreign_key => 'author_id' 

如果您的外键是作者ID。 由于您实际拥有User类,因此您的Book必须为belongs_to:user。

我是这样做的:

移民 –

 class AddAuthorToPosts < ActiveRecord::Migration def change add_reference :posts, :author, index: true add_foreign_key :posts, :users, column: :author_id end end 

class级邮报

  belongs_to :author, class_name: "User" 

移民

 t.belongs_to :author, foreign_key: { to_table: :users } 

在铁轨上工作5