web-dev-qa-db-fra.com

Rails Modèle sans table

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.

29
user993460
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.

54
Louis XIV

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
12
vedant

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. 

7
Scott S

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
0
hkairi