Num*_*ers 29 ruby-on-rails ruby-on-rails-4
我希望有一个具有多个属性的类,可以使用数值保存工作日.
summary_weekday :integer
collection_weekday :integer
Run Code Online (Sandbox Code Playgroud)
enum summary_weekday: %w(monday tuesday wednesday thursday friday saturday sunday)
enum collection_weekday: %w(monday tuesday wednesday thursday friday saturday sunday)
Run Code Online (Sandbox Code Playgroud)
但Rails不接受,我不能在同一个类中两次定义相同的值.
您尝试在模型"QuestionCategory"上定义名为"summary_weekday"的枚举,但这会生成一个实例方法"monday?",该方法已由另一个枚举定义.
我怎么解决这个问题?
小智 22
从Rails 5.0开始,当需要定义具有相同值的多个枚举时,可以使用_prefix或_suffix选项.如果传递的值为true,则方法的前缀/后缀为枚举的名称.
class Invoice < ActiveRecord::Base
enum verification: [:done, :fail], _prefix: true
end
Run Code Online (Sandbox Code Playgroud)
也可以提供自定义前缀.
class Invoice < ActiveRecord::Base
enum verification: [:done, :fail], _prefix: :verification_status
end
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是无法获得的enum,因为它会尝试创建object.tuesday?两个枚举的方法,这在逻辑上是错误的.
我记得DataMapper ORM得到了这种支持.对于ActiveRecord,您可能必须手动为这些属性创建getter和setter方法并将其映射到那里,例如:
WEEKDAYS = %w(monday tuesday wednesday thursday friday saturday sunday)
def summary_weekday
WEEKDAYS[read_attribute(:summary_weekday).to_i]
end
def summary_weekday=(value)
write_attribute(:summary_weekday, WEEKDAYS.index(value.to_s))
end
Run Code Online (Sandbox Code Playgroud)
上面的代码可能需要一些修改,而类型转换等.我知道这不是一个通用的证据,我真的很想知道这个有趣的问题的任何更好的解决方案; 肯定会非常有用.
礼貌 - Ruby论坛
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
6659 次 |
| 最近记录: |