Неопределенная ошибка метода с ассоциацией has_one - PullRequest
0 голосов
/ 10 марта 2019

У меня есть модель магазина и модель пользователя. Логика заключается в том, что у пользователей может быть один магазин, а у магазинов может быть один пользователь, связанный с ними, поэтому я использую ассоциацию has_one: shop.

Но при создании нового магазина для нового пользователя я получаю эту ошибку

неопределенный метод 'shops' для # <\ User: 0x007f6f30659068> Вы имели в виду? магазин магазин =

Я не понимаю, что пошло не так. Я уверен, что я сделал что-то глупое, вот мой код:

class ShopsController < ApplicationController
  before_action :authenticate_user!, except: [:index, :show]

  def new
    @shop = current_user.shop.build
  end

  def create
    @shop = current_user.shops.build(shop_params)
    @shop.user = current_user

    respond_to do |format|
      if @shop.save
        format.html { redirect_to @shop, notice: 'Shop was successfully created.' }
        format.json { render :show, status: :created, location: @shop }
      else
        format.html { render :new }
        format.json { render json: @shop.errors, status: :unprocessable_entity }
      end
    end
  end

  private    
    def shop_params
      params.require(:shop).permit(:name, :description, :imageshop, :location, :web, :email, :phone, :business_type, :category)
    end
end

class Shop < ApplicationRecord
  mount_uploader :imageshop, ImageUploader
  belongs_to :user
end

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

1 Ответ

0 голосов
/ 10 марта 2019

Я думаю, вам нужно изменить

@shop = current_user.shops.build(post_params)

на

@shop = current_user.build_shop(post_params)

Это потому, что вы указали, что у пользователя может быть один магазин.

Надеюсьпомогает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...