Rails更改记录值

时间:2013-07-31 07:38:48

标签: ruby-on-rails ruby-on-rails-3 attributes ruby-on-rails-3.2 records

我在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

2 个答案:

答案 0 :(得分:3)

在您的模型中添加此方法,当您致电@user.status时,它会显示“有效”或“无效”。

def status
  self.status?  ?  "Active" : "Inactive"
end
希望,这会有所帮助。感谢

答案 1 :(得分: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