在Rails

时间:2018-05-09 17:54:29

标签: ruby-on-rails ruby ruby-on-rails-5

是否有一种简单的方法可以在Rails中重载数据类型?

例如,将Boolean渲染为:

true  #=> 
false #=> 

或整数:

6  #=> 'six'
10 #=> 'ten'

我希望列名称有http://guides.rubyonrails.org/i18n.html#translations-for-active-record-models之类的东西,列的数据类型会有一些编程方法。

这非常接近https://blog.arkency.com/2016/03/custom-typecasting-with-activerecord-virtus-and-dry-types/。但内置的东西会更好;)

2 个答案:

答案 0 :(得分:2)

您可以通过覆盖类to_s方法来完成此操作,例如:

class TrueClass
  def to_s
    'foo' 
  end
end

puts true #=> 'foo'

我不确定这总是一个好主意,但是它是如何做到的:)

对于整数,你需要写一些东西来转换它们,或者使用像numbers_and_words这样的宝石,但上述方法仍然适用。

希望能让你朝着正确的方向前进!如果您有任何疑问,请与我联系。

答案 1 :(得分:1)

  

是否有一种简单的方法可以在Rails中重载数据类型?

通过渲染助手传递您的数据:

class ApplicationHelper
  # "mf" for my_format
  def mf(value)
    case value
    when true
      ''
    when false
      ''
    when Integer
      value.to_english_words # or something like that
    else
      value # unchanged
    end
  end
end

然后,在视图中。

<%= mf user.approved? %>
<%= mf user.age %>