【问题标题】:Ruby on Rails: undefined method `model_name' for NilClass:ClassRuby on Rails:NilClass:Class 的未定义方法“model_name”
【发布时间】:2012-09-27 10:02:47
【问题描述】:

我正在尝试允许用户将项目输入数据库。其中一个字段允许他们为该项目输入多种技术。

这是我的项目控制器,新建和创建操作。

def new
    @project = Project.new

@all_technols = Technol.all

@project_technol = @project.projecttechnols.build

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end


def create

    @project = Project.new(params[:project])

params[:technols][:id].each do |technol|

if !technol.empty?

    @project.projecttechnols.build(:technol_id => technol)
end
end

end

这是我的多选技术下拉列表的新项目视图。

<%= fields_for(@project_technol) do |ab| %>

<div class="tech">
<%= ab.label "All Tech" %><br/>

<%= collection_select(:technols, :id, @all_technols, :id, :tech, {}, {:multiple => true} ) %>
</div>
<% end %>

目前,我有一个页面,用户可以在其中输入一项新技术。但我想将此选项移至创建新项目页面,在那里他们可以选择现有技术,或输入新的技术,或两者兼而有之,他们将与该项目一起保存。

编辑:更改问题,并添加模型文件

但是,当我尝试保存新项目时,出现此错误。

undefined method `model_name' for NilClass:Class

Extracted source (around line #233):

233: <%= fields_for(@project_technol) do |ab| %>
234: 
235: <div class="tech">
236: <%= ab.label "All Tech" %><br/>

project.rb

class Project < ActiveRecord::Base

  attr_accessible :tech


  has_many :projecttechnols
  has_many :technols, :through => :projecttechnols
end

technol.rb

class Technol < ActiveRecord::Base
  attr_accessible :tech

has_many :projecttechnols
has_many :projects, :through => :projecttechnols
end

projecttechnol.rb

class Projecttechnol < ActiveRecord::Base
  attr_accessible :project_id, :technol_id

belongs_to :technol
belongs_to :project
end

EDIT2:

def new
    @project = Project.new

@all_technols = Technol.all

#@project_technol = @project.projecttechnols.build


@project_technol = Projecttechnol.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @project }
    end
  end

【问题讨论】:

    标签: ruby-on-rails ruby database model controller


    【解决方案1】:

    参考this

    改变

    @project.projecttechnols.build
    

    @project.technols.build
    

    假设您有以下模型声明

    项目.rb

    has_many :technols
    

    technols.rb

    belongs_to :project_id
    

    【讨论】:

    • 还是不行undefined method technols for #&lt;Project:0xafcef54&gt; :(
    • 抱歉,我没有保存我的模型。谢谢你的帮助。我已经更新了我的问题,因为现在我遇到了另一个错误。创建页面现在加载,我可以选择数据库中的技术,但现在我无法保存项目。
    • @project_technol = Projecttechnol.new替换@project_technol = @project.projecttechnols.build
    • 如果是``projects/new.html.erb`,请注明文件名,那么project controllernew方法应该有上面一行。
    • 见edit2。错误说Showing /home/james/Desktop/webapp/app/views/projects/new.html.erb where line #233 raised: undefined method model_name for NilClass:Class
    猜你喜欢
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    相关资源
    最近更新 更多