声明路由和关系后未定义的方法 'class'

undefined method 'class' after declare routes and relationships

我已经开始学习 rails 和 ruby。我正在编码和一个用户有很多买卖的应用程序。我一直在学习所有教程并在 SOF 中寻找许多答案,但没有成功,所以这是我的问题:

NoMethodError in SellsController#create undefined method `sell' for #

我的用户所在的位置 "usuario"(西班牙语)。

我知道我在某处遗漏了一些东西,因为我已经在购买时这样做并且效果很好。这些是我的文件

Usuario.rb(型号)

class Usuario < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
has_many :sells
has_many :buys
end

有"Has_many"

Sell.rb(型号)

class Sell < ActiveRecord::Base
  belongs_to :usuario
  after_create :set_estado

  private

  def set_estado
    self.estado = true
  end

end

该方法是因为我试图将 "estado"(状态)设置为 true。

销售控制器

class SellsController < ApplicationController
  before_action :set_sell, only: [:show, :edit, :update, :destroy]
  before_action :authenticate_usuario!

  # GET /sells
  # GET /sells.json
  def index
    @sells = Sell.all
  end

  # GET /sells/1
  # GET /sells/1.json
  def show
  end

  # GET /sells/new
  def new
    @sell = Sell.new
  end

  # GET /sells/1/edit
  def edit
  end

  # POST /sells
  # POST /sells.json
  def create
    @sell = current_usuario.sell.new(sell_params)
    respond_to do |format|
      if @sell.save
        format.html { redirect_to @sell, notice: 'La venta ha sido creada con exito' }
        format.json { render :show, status: :created, location: @sell }
      else
        format.html { render :new }
        format.json { render json: @sell.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /sells/1
  # PATCH/PUT /sells/1.json
  def update
    respond_to do |format|
      if @sell.update(sell_params)
        format.html { redirect_to @sell, notice: 'La venta ha sido modificada con exito.' }
        format.json { render :show, status: :ok, location: @sell }
      else
        format.html { render :edit }
        format.json { render json: @sell.errors, status: :unprocessable_entity }
      end
    end
  end

  # DELETE /sells/1
  # DELETE /sells/1.json
  def destroy
    @sell.destroy
    respond_to do |format|
      format.html { redirect_to sells_url, notice: 'La venta ha sido eliminada con exito.' }
      format.json { head :no_content }
    end
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_sell
      @sell = Sell.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def sell_params
      params.require(:sell).permit(:usuario_id, :fecha_compra, :peso_final, :monto, :estado, :cantidad)
    end
end

我正在使用脚手架和 gem 设计进行身份验证。

我不知道我错过了什么,因为我在购买时有几乎相同的东西并且它有效但在销售时不起作用:(

我的Routes.db

Rails.application.routes.draw do

  devise_for :usuarios
  devise_for :users
   resources :usuarios do
     resources :buys
     resources :sells
   end

  get 'welcome/index'
  post 'welcome/index'
  post 'users/index'
    resources :buys
    resources :users
    resources :sells

end

这是我在 rails 上的第一个应用程序,所以我不知道我现在错过了什么。我正在使用 devise,Rails 4.2.1 和 postgre 作为数据库

如果您的协会是 has_many,Rails 将使用模型的复数形式作为协会名称。所以而不是

current_usario.sell.new

尝试:

current_usario.sells.build

如果您只希望每个用户一个 Sell,请改为使用 has_one 关联。

P.S。您可以考虑使用 "sales" 代替 "sells",并使用 "purchases" 代替 "buys"。