我正在尝试获取要在数据库中记录的数字的参数。在数据库中不记录输入数字中获得的数字。
inicializas_controller.rb
class InicializasController < ApplicationController
before_action :authenticate_user!
layout 'users_menus'
def index
@empresa = Parameter.find(1)
if request.post?
begin
if Inicia.factura
flash.now[:notice] = "Inicializado el Sistema de Facturacion"
end
rescue
flash.now[:notice] = "No se ha inicializado"
end
end
end
end
index.html.erb
<div class="container">
<h2 class="text-center">Inicializacion de Sistema</h2>
<p class="text-center">
<%= bootstrap_flash %>
<%= link_to 'Regresar Menu Principal', root_path, class: 'btn btn-default' %>
</p>
<%= form_tag("/inicializas/index", method: "post") do %>
<%= label_tag(:numero_factura, "Ingresar el numero de la ultima factura:") %>
<%= number_field_tag(:numero_factura) %>
<% @numero_factura = params[:numero_factura] %>
<%= puts 'numero : ' + @numero_factura.to_s %>
<%= submit_tag "Inicializar", class: Inicia.factura %>
<% end %>
</div>
索引出现在控制台上的“放置”,params
inicia.rb
class Inicia
def self.factura
p = Time.new
Invoice.destroy_all
factura = Invoice.new
factura.fecha = p.strftime("%d/%m/%Y")
factura.impuesto = 'S'
factura.status_id = 1
factura.customer_id = 1
factura.fecha_vencimiento = p.strftime("%d/%m/%Y")
factura.orden_compra = 'X'
factura.pedido = 'X'
factura.sale_id = 1
factura.moneda = 'S/.'
factura.numero_factura = params[:numero_factura]
factura.save
Rails.logger.info(factura.errors.inspect)
end
def self.get_date
Time.now.strftime('%F')
end
end
错误:
未定义的局部变量或方法`params'用于Inicia:Class
答案 0 :(得分:2)
undefined local variable or method `params' for Inicia:Class
params
可在您的控制器中使用。它在任何其他地方都没有,比如模型和其他类等。因此,你得到了上面提到的错误。
您可以查看Rails here中的params
实现。
基本上,当您在Rails中编写控制器时,您从继承自ApplicationController
类的ActionController::Base
继承它。通过此操作,params
可用于您的控制器操作。在您的情况下,Inicia
类不是从ApplicationController
继承而且不是控制器本身。因此,您无法访问params
课程中的Inicia
。
希望这说清楚。
答案 1 :(得分:0)
要进一步@K M Rakibul Islam
出色的答案(我赞成),您需要重构代码。
具体来说,我认为您需要将class
代码放入Invoice
模型中,并从您的控制器管理该批次:
#app/controllers/inicializas_controller.rb
class InicializasController < ApplicationController
def index
Invoice.destroy_all
@factura = Invoice.new(factura_params)
if @factura.save
flash.now[:notice] = "Inicializado el Sistema de Facturacion"
else
flash.now[:notice] = "No se ha inicializado"
end
end
private
def time
Time.now
end
def factura_params
{
fecha: time.strftime("%d/%m/%Y"),
impuesto: 'S',
status_id: 1,
customer_id: 1,
fecha_vencimiento: time.strftime("%d/%m/%Y"),
orden_compra: 'X',
pedido: 'X',
sale_id: 1,
moneda: 'S/.',
numero_factura: params[:numero_factura]
}
end
end
这应该可以解决您所看到的错误,但仍需要进行一些重大的重构才能使其尽可能模块化。
答案 2 :(得分:0)
朋友们,圣诞快乐! 非常感谢您的贡献。现在,我对修改后的代码有疑问,我看到数据库的记录会被自动删除。我必须添加一行代码,如果你删除或不删除。到目前为止一切正常。代理修正。
index.html.erb
<div class="container">
<h2 class="text-center">Inicializacion de Sistema</h2>
<p class="text-center">
<%= bootstrap_flash %>
<%= link_to 'Regresar Menu Principal', root_path, class: 'btn btn-default' %>
</p>
<%= form_tag("/inicializas/index", method: "post") do %>
<%= label_tag(:numero_factura, "Ingresar el numero de la ultima factura:") %>
<%= number_field_tag(:numero_factura) %>
<% @numero_factura = params[:numero_factura] %>
<%= label_tag(:respuesta1, "Desea Inicializar el Sistema de Facturacion: (S)i / (N)o") %>
<%= text_field_tag(:respuesta1, nil, maxlength: 1) %>
<%= puts 'numero : ' + @numero_factura.to_s %>
<%= submit_tag "Inicializar" %>
<% end %>
</div>
inicializas_controller.rb
class InicializasController < ApplicationController
before_action :authenticate_user!
layout 'users_menus'
def index
@empresa = Parameter.find(1)
@respuesta1 = params[:respuesta1]
if @respuesta1 == 'S'
Invoice.destroy_all
@factura = Invoice.new(factura_params)
if @factura.save
flash.now[:notice] = "Inicializado el Sistema de Facturacion"
else
flash.now[:notice] = "No se ha inicializado"
end
else
flash.now[:notice] = "No se ha inicializado el Sistema de Facturacion"
end
end
private
def time
Time.now
end
def factura_params
{
fecha: time.strftime("%d/%m/%Y"),
impuesto: 'S',
status_id: 1,
customer_id: 1,
fecha_vencimiento: time.strftime("%d/%m/%Y"),
orden_compra: 'X',
pedido: 'X',
sale_id: 1,
moneda: 'S/.',
numero_factura: params[:numero_factura]
}
end
end