Класс был передан в `: class_name`, но мы ожидаем строку - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь создать таблицу соединений с именем: books_users, где столбец в книгах: Applicant является логическим значением, где, если человек нажимает ссылку «просмотреть эту книгу», действие утверждения в контроллере книг выполняетthis:

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

Когда рецензент нажимает на ссылку, чтобы просмотреть книгу, я получаю NameError в BooksController # претензия

неинициализированная константа Book:: Claim

Я пытался указать отношения hmbtm в модели после того, как назван foreign_key_association, я делаю имя_класса: ClassName, думая, что это может исправить ошибку, но я получаю новое сообщение Aкласс был передан в :class_name, но мы ожидаем строку.

Я действительно сбит с толку, и мне нужен кто-то, чтобы объяснить это мне.Спасибо!

1 Ответ

0 голосов
/ 01 октября 2018

Ошибка говорит, что вы должны передать строку как 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
...