Ошибка Rails: неопределенный метод `product 'для # Вы имели в виду? продукты продукты = - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь разработать Shopping application, в котором есть 3 модели, а именно User(Devise), Product и Batch. Я создал ассоциацию has_many между User и Product и создал User(signed up in Devise). А затем я изменил ассоциацию на has_and_belongs_to_many и создал миграцию для создания таблицы соединения. Я выполнил этот ответ { ссылка }, чтобы добавить Product к current_user. Затем я удалил свою учетную запись пользователя и попытался зарегистрироваться, но выдает такую ​​ошибку. NoMethodError в Devise :: RegistrationsController # создать неопределенный метод `product 'для # Вы имели в виду? продукты продукты =

Модель пользователя:


class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  has_and_belongs_to_many :products, :dependent => :destroy
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable

  validates_length_of :product, maximum: 10
end

Модель продукта:

class Product < ApplicationRecord
  belongs_to :batch
  has_and_belongs_to_many :user
  validates :name, presence: true
  validates_associated :user

end

Контроллер продукта

class ProductsController < ApplicationController
  before_action :authenticate_user!

  def index
    @products = Product.all
  end

  def show
    @product = Product.find(params[:id])
  end

  def new
    @product = Product.new
  end

  def edit
  end

  def create
  end

  def update 
  end

  def destroy
  end

  def add_cart
    product = Product.find(params[:product_id])
    #current_user.products << product
    #current_user.products << product unless current_user.products.include?(product)
    if current_user.products.include?(product)
      redirect_to products_path, notice: "Already in your cart"
    else
      current_user.products << product
      redirect_to products_path, notice: "Added to cart"
    end
  end

end

Что я здесь не так делаю. И еще хочу удалить Product из корзины, уничтожив его из current_user. Как это сделать?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Вы оставили старую проверку в своей модели пользователя.

Удалите эту строку в файле app / models / user.rb validates_length_of :product, maximum: 10

0 голосов
/ 18 июня 2020

Ваша ошибка связана с пометкой метода create Devise RegistrationsController. Скорее всего, вы оставили там ссылку на user.product, тогда как у пользователей есть продукты во множественном числе.

...