ruby-on-rails – 如何在Ruby on Rails中为模型添加虚拟属性?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 如何在Ruby on Rails中为模型添加虚拟属性?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究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.

猜你在找的Ruby相关文章