ruby-on-rails – 如何在Ruby on Rails中为模型添加虚拟属性?
发布时间:2020-12-16 20:55:03 所属栏目:百科 来源:网络整理
导读:我正在研究RubyonRails / ActiveAdmin应用程序.我的RoR版本是4.2.5,AA版本是1.0.0.我有一个模型消息如下. class Message ActiveRecord::Base belongs_to :user validates :user,:content,presence: true def palindrome # return true/false endend 如您所见
我正在研究RubyonRails / ActiveAdmin应用程序.我的RoR版本是4.2.5,AA版本是1.0.0.我有一个模型消息如下.
class Message < ActiveRecord::Base belongs_to :user validates :user,:content,presence: true def palindrome # return true/false end end 如您所见,我想要一个只读属性回文,它只取决于消息的内容.我希望将此属性视为与普通属性完全相同.通常,我的意思是当我通过rails控制台检索消息或请求消息的json格式时,我想在列表中看到一个回文属性.我还希望通过此属性对消息进行过滤. 我不知道怎么能实现这个目标. 解决方法
在您的模型中,您可以通过以下方式为虚拟属性palindrome属性编写属性访问器(读取器/写入器):
# attr_reader def palindrome self[:palindrome] end # attr_writer def palindrome=(val) self[:palindrome] = val end # virtual attribute def palindrome #return true/false end 并且,当您使用Rails 4时,您必须将控制器属性中的palindrome属性列入您的强控制定义中的任何其他模型属性,以便能够批量指定回文值.像这样的东西: # your_controller.rb private def your_model_params params.require(:message).permit(:palindrome) end 看看这个RailsCast on Virtual Attributes.虽然它有点旧,但对概念很有用. 注意: 虚拟属性不会自动显示在参数列表中.但是,您应该能够通过Rails控制台访问它,如下所示:Message.new.palindrome.此外,您可以在JSON API中公开此虚拟属性,例如,如果您使用的是Active Model Serializer,则可以在MessageSerializer中使用:属性palindrome,然后将palindrome暴露给JSON API. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |