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

时间:2015-05-28 17:41:50

标签: ruby-on-rails ruby ruby-on-rails-4 devise

我一直在学习铁轨和红宝石。我编码和应用程​​序,一个用户有很多购买和销售。我一直在做所有教程并在SOF中寻找许多答案,但没有成功,所以这是我的问题:

  

SellsController中的NoMethodError #create   未定义的方法`出售'#

我的用户是西班牙语的“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

我使用脚手架和宝石设计进行身份验证。

我不知道我失踪了什么,因为我在购买时几乎完全相同并且它正在工作但是卖不起作用:(

我的 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作为数据库

1 个答案:

答案 0 :(得分:0)

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

current_usario.sell.new

尝试:

current_usario.sells.build

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

P.S。您可以考虑使用&#34; sales&#34;而不是&#34;销售&#34;和&#34;购买&#34;而不是&#34;购买&#34;。