2012-05-30 8 views
13

He revisado todas las preguntas relacionadas, pero no hay nada nuevo para mí aquí.método undefined `model_name 'for Project: Clase

que tienen un controlador de Proyectos con "nueva" acción

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

proyecto es una clase simple, no registro activo:

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

me sale el error "método no definido` nombre_del_modelo' para el Proyecto : Clase"

Este es un ejemplo de archivo erb:

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

Respuesta

29

Si el proyecto no es una subclase registro activo, necesita estos y se puede utilizar form_for

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

vista:

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

Viktor, muchas gracias! Me ayudó. Solo me quedé con esto. Tal vez, esta no es la mejor manera de crear una instancia temporal para distribuir, de modo que el usuario pueda crear un proyecto real de registro activo. – Dmitry

+0

De hecho, si alguna vez persiste Project, no lo use, use la clase Project

+0

Gracias, gran ayuda. @ ViktorTrón ¿Alguna idea sobre cómo familiarizarse con el conocimiento de Rails en la medida en que puede solucionar este problema? –

3
class Project < ActiveRecord::Base 
+0

En este caso obtengo "No se pudo encontrar mesa 'proyectos'" – Dmitry

+0

Solo quiero crear una instancia de proyecto temporal para que un usuario del lado del cliente pueda editar nuevos parámetros para crear una instancia de proyecto válida en el lado del servidor – Dmitry

+1

oh, en ese caso, solo use el nuevo objeto de la clase persistente de ActiveRecord en el formulario. Es temporal, ya que no lo guardas. Si su clase nunca se mantiene, vea mi respuesta. –

Cuestiones relacionadas