nil的未定义方法`name':保存

时间:2015-11-07 15:08:54

标签: ruby-on-rails activerecord

我在这里发帖是因为我找不到有这个错误的人。我正在使用Rails 4.0.2,当我尝试保存我的表单(它使用collection_check_box)时,它给了我这样的信息:

NoMethodError (undefined method `name' for nil:NilClass):
  app/controllers/projeto_controller.rb:34:in `block in create'
  app/controllers/projeto_controller.rb:33:in `create'

我在这里有点迷失,因为我没有任何名为name的属性。 这是我的控制器和型号。

class Projeto < ActiveRecord::Base
  belongs_to :usuario
  has_many :projeto_temas
  has_many :temas, through: :projeto_temas

  accepts_nested_attributes_for :temas

  validates_presence_of :titulo, :orgao_financiador, :periodo_inicio, :periodo_fim
end

class ProjetoController < ApplicationController

  # GET /projeto/new
  def new
    @projeto = Projeto.new
    render :layout => 'application_cadastro'
  end

  # POST /projeto
  # POST /projeto.json
  def create
    @projeto = Projeto.new(projeto_params)
    respond_to do |format|
      if @projeto.save
        format.html { redirect_to @projeto, notice: 'Projeto was successfully created.' }
        format.json { render action: 'show', status: :created, location: @projeto }
      else
        format.html { render action: 'new' }
        format.json { render json: @projeto.errors, status: :unprocessable_entity }
      end
    end
  end

  # PATCH/PUT /projeto/1
  # PATCH/PUT /projeto/1.json
  def update
    respond_to do |format|
      if @projeto.update(projeto_params)
        format.html { redirect_to @projeto, notice: 'Projeto was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: 'edit' }
        format.json { render json: @projeto.errors, status: :unprocessable_entity }
      end
    end
  end    
  private
    # Use callbacks to share common setup or constraints between actions.
    def set_projeto
      @projeto = Projeto.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def projeto_params
      params.require(:projeto).permit(:titulo, :usuario_id, :orgao_financiador, :periodo_inicio, :periodo_fim, :resumo, :temas_ids => [])
    end
end

Temas模型。

class Temas < ActiveRecord::Base
  has_many :relacionamento_temas_pai, class_name: RelacaoTemas, foreign_key: :temas_pai_id
  belongs_to :relacionamento_temas_filho, class_name: RelacaoTemas, foreign_key: :temas_filho_id
  has_and_belongs_to_many :projeto

  accepts_nested_attributes_for :relacionamento_temas_pai

  validates :nome, presence: true
end

ckeck_box

视图的一部分
<div class="presquisadores-preview-action">
            <div class="temas-projetos-checkbox">
              <%= f.collection_check_boxes :temas_ids, Temas.all, :id, :nome %>
            </div>
          </div>

它有一个名为nome的属性,对于名称是葡萄牙语,所以它不应该影响任何东西。

提前感谢您的帮助,真的输了,不知道该怎么做。

- 修改

所以...经过大量研究后我没有发现问题。实际上我正在研究一些rails文档,看到了activerecord版本的一些问题,所以我更新到rails 4.2.0,问题现在已经消失。 我仍然不知道是什么导致它,但现在我的表格正常保存。 感谢所有帮助人员

1 个答案:

答案 0 :(得分:0)

这是Rails 4.0.2的一个问题。我遇到了同样的问题,当我更新到Rails 4.0.13(4.0.x系列中的最后一个)时,问题就解决了。

从github问题来看,我只能说这是因为Rails没有准备的一些数据库错误。