Je veux créer une liste de sélection pour disons les couleurs, mais ne veux pas créer un tableau pour les couleurs. Je l'ai vu n'importe où, mais je ne le trouve pas sur Google.
Ma question est la suivante: comment puis-je mettre les couleurs dans un modèle sans table de base de données?
Ou y a-t-il une meilleure manière de faire cela?
J'ai vu quelqu'un mettre un tableau ou un hachage directement dans le modèle, mais je ne pouvais plus le trouver.
class Model
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :whatever
validates :whatever, :presence => true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
attr_accessor créera vos attributs et vous créerez l'objet avec les attributs initialize () et set.
La méthode persistante indiquera qu'il n'y a pas de lien avec la base de données. Vous pouvez trouver des exemples comme celui-ci: http://railscasts.com/episodes/219-active-model?language=fr&view=asciicast
Ce qui va vous expliquer la logique.
Les réponses sont correctes pour 2013, mais Rails 4 a maintenant extrait toutes les fonctionnalités indépendantes de la base de données de ActiveRecord
à ActiveModel
. En outre, il y a un guide génial officiel pour cela.
Vous pouvez inclure autant de modules que vous le souhaitez, ou le moins possible.
Par exemple, il vous suffit de include ActiveModel::Model
et vous pouvez renoncer à une telle méthode initialize
:
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
Il suffit d'utiliser:
attr_accessor :name, :age
La réponse la plus simple est simplement de ne pas sous-classer à partir de ActiveRecord :: Base. Ensuite, vous pouvez simplement écrire votre code d'objet.
Si vous voulez avoir une liste de sélection (qui n’évolue pas), vous pouvez définir une méthode dans votre ApplicationHelper
qui retourne une liste, par exemple:
def my_color_list
[
"red",
"green",
"blue"
]
end