Empresa中的NameError #new uninitialized constant ActionView :: CompiledTemplates :: Empresas

时间:2017-05-30 19:30:09

标签: ruby-on-rails ruby

错误:

SyntaxError
/root/projeto/config/routes.rb:9: syntax error, unexpected tIDENTIFIER, expecting keyword_end get "/empresa/new" to: 'empresa#new' 
^ /root/projeto/config/routes.rb:10: syntax error, unexpected tIDENTIFIER, expecting keyword_end post "/empresas" to: 'empresa#create' ^

代码:

<%= form_for Empresas.new do |f| %>
  <div class = "form-group">
    <%= f.label :nome %>
    <%= f.text_field :nome , class: "form-control" %>
  </div>

  <div class="form-group">
    <%= f.label :endereco %>
    <%= f.text_field :endereco, class: "form-control" %>
  </div>

  <div class="form-group">
    <div class="col-sm-offset-2 col-sm-10">
      <%= f.submit "Criar", class: "btn btn-primary" %>
    </div>
  </div>
<% end %>

控制器:

    class EmpresaController < ApplicationController
    def index
        @empresa = Empresa.order :nome
    end

   def new
  @empresa = Empresa.new
end

def create
  valores = params.require(:empresa).permit :nome, :endereco
  @empresa= Empresa.create  valores
  if @empresa.save
    redirect_to root_url
  else
    render :new
  end
end
end

路线: 以下是用户和公司的路线。 您的公司代码不会随时调用用户路线。

Rails.application.routes.draw do
        post "/usuarios" => "usuario#create"
        get "/usuario/new" => "usuario#new"
        delete "/usuario/:id" => "usuario#destroy", as:  :usuario
        get "/usuario/busca" => "usuario#busca", as: :busca_usuario
        root to: "usuario#index"
        get "/usuario/lista" => "usuario#lista"
        get "/empresa/index" => "empresa#index"
        get "/empresa/new" to: 'empresa#new'
        post "/empresas" to: 'empresa#create'
    end

1 个答案:

答案 0 :(得分:0)

使用form_for帮助程序时,请使用单数形式的模型:

<%= form_for Empresa.new do |f| %>

另外,为了维护MVC模式,您可以在控制器中创建一个等于Empresa.new的实例变量,然后将其传递给表单。

您可以查看Rails helpers

尝试编辑您的控制器,如:

# app/controllers/empresa_controller.rb
...
def new
  @empresa = Empresa.new
end

def create
  valores = params.require(:empresa).permit :nome, :endereco
  @empresa= Empresa.create  valores
  if @empresa.save
    redirect_to root_url
  else
    render :new
  end
end

请确保您的路线中有两种方法:

# config/routes.rb
get '/empŕesa/new', to: 'empresa#new'
post '/empresas', to: 'empresa#create'

然后在new视图中,您将@empresa方法中定义变量new,您可以在表单中使用它:

# app/views/empresa/new.html.erb
<%= form_for @empresa do |f| %>

更新:问题的最后一次更新显示您缺少路线定义中的逗号。