Лучшие практики для разных типов столбцов в Rails - PullRequest
3 голосов
/ 22 января 2011

У меня есть модель в рельсах, которая ссылается на элемент game_item, принадлежащий пользователю.Это оружие имеет столбец is_equipped, который напоминает, экипирован предмет или нет.Элемент game_item может быть оружием, шлемом и т. Д. (Определено item_type в модели game_item).

Теперь я ищу хороший способ получить экипированный предмет для каждого типа.Я могу делать такие вещи, как get_equipped_item (type) и указывать тип, или get_equipped_helmet, get_equipped_weapon и т. Д. Я ищу лучший способ сделать это, путь рельсов :) Есть идеи?

Ответы [ 2 ]

5 голосов
/ 22 января 2011

Для этого вы можете использовать области действия .

Что-то вроде

scope :equipped, where(:is_equipped => true)
scope :helmet, where(:item_type => 'helmet')
scope :weapon, where(:item_type => 'weapon')

Тогда используйте их как

ModelName.equipped # => all equipped items
ModelName.helmet.equipped # => all equipped helmets

Дальнейшее чтение: http://edgerails.info/articles/what-s-new-in-edge-rails/2010/02/23/the-skinny-on-scopes-formerly-named-scope/index.html, http://asciicasts.com/episodes/215-advanced-queries-in-rails-3

0 голосов
/ 22 января 2011
rails generate scaffold GameItem item_type:string is_enabled:boolean

rake db:migrate

rails console

a = GameItem.new(:item_type => "helmet", :is_enabled => true)
b = GameItem.new(:item_type => "gun", :is_enabled => false)
c = GameItem.new(:item_type => "knife", :is_enabled => true)

s = [a, b, c]

s.find_all{|item| item.is_enabled == true}

s.size // size is 2 since 2 of the items in the array have is_enabled set to true.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...