Где поставить константы в Rails - PullRequest
2 голосов
/ 29 апреля 2010

У меня есть несколько констант, которые являются массивами, для которых я не хочу создавать записи базы данных, но я не знаю, где хранить константы без ошибок.

Например

CONTAINER_SIZES = [["20 foot"],["40 foot"]]

Где я могу хранить это, чтобы все модели и контроллеры имели к нему доступ?

Ответы [ 2 ]

2 голосов
/ 29 апреля 2010

Я напишу тебе свой путь.

class User < ActiveRecord::Base   
  STATES = {
    :active => {:id => 100, :name => "active", :label => "Active User"},
    :passive => {:id => 110, :name => "passive", :label => "Passive User"},
    :deleted => {:id => 120, :name => "deleted", :label => "Deleted User"}
  }

  # and methods for calling states of user

  def self.find_state(value)
    if value.class == Fixnum
      Post::STATES.collect { |key, state|
        return state if state.inspect.index(value.to_s)
      }
    elsif value.class == Symbol
      Post::STATES[value]
    end
  end
end

так что я могу назвать это как

User.find_state(:active)[:id]

или

User.find_state(@user.state_id)[:label]

Также, если я хочу загрузить все состояния в поле выбора и если я не хочу, чтобы в нем были некоторые состояния (например, удаленное состояние)

def self.states(arg = nil)
  states = Post::STATES
  states.delete(:deleted)
  states.collect { |key, state|
    if arg.nil?
      state
    else
      state[arg]
    end
  }
end

И теперь я могу использовать его как

select_tag 'state_id', User.states.collect { |s| [s[:label], s[:id]] }
2 голосов
/ 29 апреля 2010

Я положил их прямо в класс модели.

class User < ActiveRecord::Base
USER_STATUS_ACTIVE = "ACT"
USER_TYPES = ["MANAGER","DEVELOPER"]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...