代码之家  ›  专栏  ›  技术社区  ›  Sam å±±

在rails中放置常量的位置

  •  2
  • Sam å±±  · 技术社区  · 14 年前

    我有几个常量,它们是数组,我不想为它们创建数据库记录,但我不知道在哪里存储常量而不会出现错误。

    例如

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

    我可以在哪里存储它,以便所有模型和控制器都可以访问它?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Mehmet Davut    14 年前

    我会给你写信的。

    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
  •  2
  •   randika    14 年前

    我把它们直接放在模型课上。

    class User < ActiveRecord::Base
    USER_STATUS_ACTIVE = "ACT"
    USER_TYPES = ["MANAGER","DEVELOPER"]
    end