加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读