一个类被传递给`:class_name`,但是我们期望一个字符串

时间:2018-10-01 02:24:29

标签: ruby-on-rails arrays associations has-and-belongs-to-many jointable

我正在尝试创建一个称为:books_users的联接表,其中书中的列:claim是一个布尔值,如果某人单击链接以“查看此书”,则书控制器中的Claim操作会

def claim
    book = Book.find(params[:id])
    book.claims << current_user unless book.claims.include?(current_user)
    redirect_to current_user
    flash[:notice] = "You have a new book to review!"
  end

此操作的目的是让注册了审阅者的我的用户可以进入书展页面,并且他们是否决定审阅由审阅者通过体裁找到的作者上传的书?然后,他们实质上表示他们将要审核该书,其收据最终将作为经过验证的购买书评出现在亚马逊上,而不是书展页面上该网站上的俗气文本评论(这将使签署该书的作者审核服务非常愉快)。

我的模型如下:

book.rb 

class Book < ApplicationRecord
  mount_uploader :avatar, AvatarUploader
  belongs_to :user
  has_and_belongs_to_many :genres
  has_and_belongs_to_many :claims, join_table: :books_users, association_foreign_key: :user_id

end

user.rb

class User < ApplicationRecord
mount_uploader :avatar, AvatarUploader

  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :books
  enum access_level: [:author, :reviewer]

  has_and_belongs_to_many :claims, join_table: :books_users, association_foreign_key: :book_id
end

当审阅者单击链接以审阅这本书时,我在BooksController#claim中收到NameError

未初始化的常量Book ::声明

我已经尝试在命名foreign_key_association后在模型中的hmbtm关系中指定,我做了一个class_name:ClassName,以为可以解决错误,但是我得到一个新的说法,是将类传递给{ {1}},但我们需要一个字符串。

我真的很困惑,需要有人向我解释一下。谢谢!

1 个答案:

答案 0 :(得分:3)

该错误表明您应该将字符串作为class_name参数传递,或者可以使用未公开的class选项:

class Foo < AR
  has_many :bars, class_name: to_s 
  # to_s returns the class name as string the same as Bar.class.to_s
end

或:

class Foo < AR
  has_many :bars, class: Baz # returns the class
end