没有参数

时间:2015-12-25 02:10:56

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

我正在尝试获取要在数据库中记录的数字的参数。在数据库中不记录输入数字中获得的数字。

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

3 个答案:

答案 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