【问题标题】:NameError in Empresa#new uninitialized constant ActionView::CompiledTemplates::EmpresasEmpresa 中的 NameError#new 未初始化常量 ActionView::CompiledTemplates::Empresas
【发布时间】:2017-05-30 19:30:08
【问题描述】:

错误:

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

【问题讨论】:

  • 查看你最后两条路由,需要用逗号分隔URI定义和方法。试试get "/empresa/new", to: 'empresa#new' post "/empresas", to: 'empresa#create'
  • 成功了,非常感谢!!

标签: ruby-on-rails ruby


【解决方案1】:

当您使用 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 视图中,您将在new 方法中定义变量@empresa,您可以在表单中使用它:

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

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

【讨论】:

  • 这改变了错误,现在是: NoMethodError in Empresa#new Showing /root/projeto/app/views/empresa/new.html.erb where line #4 raise: undefined method `empresas_path' for #:0x007fd719fed1c8> 你的意思是? empresa_new_path
  • 尝试设置empresa_new_path 而不是empresas_path,或者将您的路线添加到问题中。
  • 路由:get "/empresa/index" =&gt; "empresa#index"get "/empresa/new" =&gt; "empresa#new"
  • empresa_new_path 不起作用吗?new.html.erb 有什么内容?
  • 我该怎么做,包括 empresa_new_path 以及我在哪里做这个?
猜你喜欢
  • 2017-03-02
  • 2012-04-29
  • 2023-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2016-02-27
相关资源
最近更新 更多