2010-10-16 1 views

Répondre

1

Je suggère modèle créer avec page_visits d'attribut qui contient quantité exacte de visites et de définir la méthode dans l'action, SMTH comme

def page_visit_range 
    #case when statement for self.page_visits or some smarter maths to return range 
end 
7

Je suppose que vous voulez vraiment stocker une gamme dans votre modèle et pas une valeur dans une plage. (Si vous vouliez faire le dernier, les validations seraient votre réponse).

Donc, gamme. Dans un modèle. Vous avez deux options, dont chacune est assez décente.

Option 1: Créez une colonne (range_column) avec le type 'texte'. Passez un objet plage Ruby à la colonne, comme @my_model_object.range_column = (50..100). Dites-Rails de sérialisation votre gamme comme ceci:

class MyModel < ActiveRecord::Base 
    serialize :range_column 
end 

Maintenant, Rails vous permet de convertir automatiquement votre gamme de YAML pour le stockage de base de données, et le convertir à l'objet de la plage quand il récupère à nouveau l'enregistrement. Ne devient pas beaucoup plus facile que ça!

Option 2: Créez deux colonnes (range_start et range_end) avec le type 'entier'. Mettre en place quelque chose dans votre modèle comme celui-ci:

class MyModel < ActiveRecord::Base 
    def range=(rstart, rend) 
    self.range_start = rstart 
    self.range_end = rend 
    end 

    def range 
    (range_start..range_end) # or as an array, or however you want to return it 
    end 
end 

La première option est plus facile (et, à mon avis, mieux), tandis que le second vous donne un peu peu plus de flexibilité de la boîte si vous n » Je ne veux pas utiliser un objet de la gamme Ruby (mais pourquoi pas vous?).

+0

Dans le cas d'une sérialisation, devrions-nous/pourrions-nous utiliser 'serialize: range_column, Range' ou est-ce que je me méprends sur l'utilisation prévue de cet argument? – Ziggy

Questions connexes