0

我在 postgresql 中有一条用户状态记录,它是布尔值,它的属性是“true”和“false”。我想将“true”显示为“active”,将“false”显示为“inactive”。如何使用查询或任何要添加到模型中的东西来做到这一点。

控制器:

     def index
     @users = User.reorder("id ASC").page(params[:page]).per_page(10)
     @count = 0
     end 

模型:

    class User < ActiveRecord::Base
    has_many :orders
    has_many :order_statuses

     attr_accessible :first_name, :last_name, :email, :password,
  :password_confirmation, :code

     validates :first_name, presence: true
     validates :last_name, presence: true
     VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(\.[a-z]+)*\.[a-z]+\z/i
      validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },          uniqueness: { case_sensitive: false }
     validates :password, length: { minimum: 6}

    has_secure_password
    before_save { self.email = email.downcase }
     before_create :create_remember_token

    def User.new_remember_token
    SecureRandom.urlsafe_base64
    end

    def User.encrypt(token)
    Digest::SHA1.hexdigest(token.to_s)
    end

     private

     def create_remember_token
     self.remember_token = User.encrypt(User.new_remember_token)
      end
        end
4

2 回答 2

3

在您的模型中添加此方法,当您调用 时@user.status,它将显示“活动”或“非活动”。

def status
  self.status?  ?  "Active" : "Inactive"
end

希望,它会有所帮助。谢谢

于 2013-07-31T07:43:36.557 回答
1

如果我对您的理解正确,您希望向您的用户显示“活跃”而不是“真”和“不活跃”而不是假。

您可以在所有视图中执行以下操作:

@user.status? ? 'active' : 'inactive'

或者,如果您在很多地方都需要这个,您可以编写一个助手:

module UserHelper
  def status_text(user)
    @user.status? ? 'active' : 'inactive'
  end
end

# and call it from your views like this:

<%= status_text(@user) %>

或者,如果您只需要将此功能与用户及其活动方法结合使用,则可以将其放入模型方法中(根据 Rails Guy 的建议)

最后,如果您有一个多语言页面,您可以使用 I18n 为您翻译字符串:

# en.yml
en:
  status:
    true: 'active'
    false: 'inactive'

# user_helper.rb
def status_text(user)
  I18n.t("statys.#{user.status.to_s}")
end
于 2013-07-31T07:44:50.717 回答