Ruby on rails 如何结合RoR中常量和符号的优点?
目前,我使用常量来表示*task\u type*:Ruby on rails 如何结合RoR中常量和符号的优点?,ruby-on-rails,constants,symbols,Ruby On Rails,Constants,Symbols,目前,我使用常量来表示*task\u type*: class TaskType TWITTER_MENTION_REPLY = "twitter_mention_reply" TWITTER_FOLLOW = "twitter_follow" TWITTER_DM_REPLY = "twitter_dm_reply" TWITTER_RETWEET = "twitter_retweet" end 因此,当我初始化一个新任务时,我分配如下类型: new_task
class TaskType
TWITTER_MENTION_REPLY = "twitter_mention_reply"
TWITTER_FOLLOW = "twitter_follow"
TWITTER_DM_REPLY = "twitter_dm_reply"
TWITTER_RETWEET = "twitter_retweet"
end
因此,当我初始化一个新任务时,我分配如下类型:
new_task.task_type = TaskType::TWITTER_MENTION_REPLY
这种方法的优点是,如果常量输入不正确,解释器会给出一个错误。缺点是比较字符串的成本很高,而符号则要高得多。
所以问题是,如何将这两个好处结合起来
我尝试创建以下类:
class TaskType
TWITTER_MENTION_REPLY = :twitter_mention_reply
end
但它的问题是,在将其保存到db时,保存的字段如下所示:——:twitter\u title\u reply在保存到db之前将其转换为字符串可能会有所帮助:
:twitter_mention_reply.to_s # => "twitter_mention_reply"
# back to symbol
"twitter_mention_reply".to_sym # => :twitter_mention_reply
符号的优点来自具有对象标识符的符号;这就是符号之间O(1)比较的原因。字符串是不同的 你的目标是:
- 使用TaskType::SOME_常量选择一组任务类型
- 将TaskType保存到数据库中
- 降低任务类型之间的比较成本
class TaskType
TWITTER_MENTION_REPLY = 0
...
end
因此,您建议使用TWITTER\u-title\u-REPLY=:TWITTER\u-title\u-REPLY方法?Ruby中的字符串->符号/符号->字符串的成本是多少?您是否使用ActiveRecord或任何ORM?您好,谢谢。TWITTER\u-title\u-REPLY=:TWITTER\u-title\u-REPLY方法的缺点是什么?实际上,ActiveRecord无法映射符号;符号不是字符串,
——:twitter\u notice\u reply
是给定符号的序列化。从哲学上讲,符号代表其他事物,而在这种情况下,它们只代表自己。最终,有一个比我聪明得多的人在这里解释了符号:)