2012-05-30 105 views
13

我查看了所有相关的问题,但这里没有什么新东西。未定义方法`model_name'为项目:类

我有一个“新”行动项目负责人

class ProjectsController < ApplicationController 
    def new 
    @newproject = Project.new 
    end 
end 

项目是一个简单的类,而不是活动记录:

class Project 
    attr_accessor :name, :description 
    def initialize 
    @name = "" 
    @description = "" 
    end 
end 

我得到了项目的错误“未定义的方法`MODEL_NAME” :类”

这是一个ERB文件样品:

<%= form_tag(@newproject) do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :description %><br /> 
<% end %> 

回答

29

如果项目是不是一个有效记录的子类,你需要这些,你可以使用form_for

class Project 
    extend ActiveModel::Naming 
    include ActiveModel::Conversion 
    def persisted? 
    false 
    end 
    ... 
end 

观点:

<%= form_for(@newproject) do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :description %><br /> 
<% end %> 
+0

Viktor,非常感谢!它帮助了我。我只是坚持这一点。也许,这不是创建临时实例的最佳方式,因此用户可以创建一个真实的活动记录项目。 – Dmitry

+0

的确,如果你坚持使用Project,不要使用这个,请使用类Project

+0

谢谢,很好的帮助。@ViktorTrón任何指针如何更熟悉Rails知道你可以调试这个问题? –

3
class Project < ActiveRecord::Base 
+0

在此我得到“无法找到表'项目'” – Dmitry

+0

我只是想创建一个临时项目实例,以便客户端的用户可以编辑新的参数来创建一个有效的项目实例在服务器端 – Dmitry

+1

哦,在这种情况下,只是在表单中使用ActiveRecord持久类的新对象。这是暂时的,因为你不保存它。如果你的班级从未坚持过,请参阅我的回复。 –

相关问题