at.*_*at. 35 ruby activerecord ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2
为了保持Ruby在布尔方法中使用问号的习惯(例如person.is_smart?),我想对Rails中的ActiveRecord字段做同样的事情:
rails generate model Person is_smart?:boolean
Run Code Online (Sandbox Code Playgroud)
我实际上没有运行上述声明.我假设数据库字段中不能有问号.rails会适当地处理这个吗?简单地从模型中留下问号是最佳做法吗?
使用Rails 3.2.8
cde*_*ers 82
smart?如果有一个名为的字段,Rails将自动生成该方法'smart'.
如果您碰巧:enum在模型中使用,则需要注意一个“问题” ,因为这会将值存储为整数。active record 提供的问号 attr 方法期望在数据库中分别将 0 或 1 评估为 false / true。例如:
class Person
enum mood: ['happy', 'sad', 'bored']
end
p = Person.new(mood: 'happy') # this would store mood as 0 in db
p.mood? #=> false
p.mood = 'sad' # saves as 1 in db
p.mood? #=> true
p.mood = 'bored' # saves as 2 in db
p.mood? #=> true
Run Code Online (Sandbox Code Playgroud)
要查看此方法的工作原理,请参阅rails 源代码
| 归档时间: |
|
| 查看次数: |
10927 次 |
| 最近记录: |