2011-02-04 16 views
32

Esta es realmente una pregunta acerca de las convenciones de nomenclatura.Ruby/Rails: Modelos nombrados con dos palabras (nombres de problemas de convención)

Tengo un modelo llamado PromotedEvents

El archivo se llama promoted_events.rb

he creado en la tabla:

create_table :promoted_events do |t| 

Ahora estoy teniendo problemas para crear cualquier cosa, por lo que' Me pregunto si hay algún problema al usar el modelo con dos palabras

estoy en la consola y probé

a = PromotedEvents.new 

a = Promoted_Event.new 

a = promoted_event.new 

y seguir recibiendo un error de nameerror : uninitialized constant

¿Alguna idea?

Respuesta

48

Tu clase debe ser única.

Nombre que PromotedEvent en el archivo promoted_event.rb

a = PromotedEvent.new 
+0

¿Cuál es el comando de terminal para crear un modelo de 2 palabra? ¿es 'rails generate model Model_Name' o alguna otra combinación? ¿Se supone que ambas palabras están en mayúscula? ¿Puse el guión bajo al generar el modelo? – tbaums

+2

Creo que puedes usar 'ModelName' o' model_name', y se producirá la magia correcta. Pero 'Model_Name' no es correcto (camel case o guiones bajos, nunca ambos). Piense que es como crear la clase modelo, por lo que sería singular ya que tiene que coincidir con el nombre de la clase. –

+2

Sí, @AlexWayne tiene razón. Tanto el uso de 'CamelCase' o' under_score' es correcto según la [descripción del generador de modelo] (https://github.com/rails/rails/blob/master/railties/lib/rails/generators/rails/model/USAGE) . – vlz

19

Nombres de modelo son singulares y la caja de camello al igual que pe = PromotedEvent.new()

el archivo debe ser promoted_event.rb

controladores son plurales

PromotedEventsController

constantes son ALL_CAPS

locales son separated_by_underscores_and_lowercase

nombres de tabla son plurales 'SELECT * FROM promoted_events`

+1

¿qué pasa con los atributos dentro del modelo? es decir, rails g modelo PromotedEvent name_of_event: string --------------> o debería ser NameOfEvent: string? ¿Alguna idea de lo que es la sintaxis está aquí? – BKSpurgeon

+0

debe ser simplemente name: string, pero si necesita dos o más palabras, están en minúscula y separadas por guiones bajos, es decir, promotional_code: integer – Thrasher

8

Si ayuda, siempre pienso en ello como esto:

El nombre del modelo es singular porque representa una sola cosa, específica. Por lo tanto, PromotedEvent es un evento promocionado específico que tiene un nombre, fecha, etc.

El nombre de la tabla por el contrario es plural. Esto se debe a que la tabla almacena una colección de estos elementos singulares. Por lo tanto, promote_events.

En los rieles, los nombres de archivo son en su mayoría una cuestión de convención, ya que ruby ​​tiene reglas bastante laxas en este sentido, pero en general es class_name.rb. This page puede ayudarlo a tener una mejor idea de qué convenciones se usan, dónde y qué es específico de Ruby versus Rails.

1

Si es un n00b de rieles extremos como yo, entonces querrá recordar crear una definición de clase para su tabla recién creada y colocarla en la aplicación/modelos.

Se iría así

class LargeCat < ActiveRecord::Base 
    belongs_to :zoo 
end 
Cuestiones relacionadas