声明路由和关系后未定义的方法 '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"。
我已经开始学习 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"。