在Active Record JSON响应中添加非持久属性

时间:2016-02-15 10:39:36

标签: ruby-on-rails ruby json api ruby-on-rails-4

无论何时调用该模型,都可以创建自定义模型属性并默认包含其值吗?

我有一个名为Video的模型。它有一个名为name的属性。它包含视频sample-video.mp4的名称。我想为模型创建两个名为iphone_urlandroid_url的自定义属性。

两个属性都有不同的url与name连接。因此,iphone_urlhttp://link1/+name+/playlist.m3u8 android_urlhttp://link2/+name

是否有可能我称之为该模型,两个属性都会自动添加(在JSON响应中)?

我尝试了here提到的解决方案。

我可以使用attr_accessor添加自定义属性,但它们的值始终为null。可能是因为他们的价值需要先手动设定。

那怎么办呢?

修改:目前,我这样做:

videos = Array.new

# Dirty, but works      
Video.all.each do |video|
    video = video.attributes

    wowza_server = "X.X.X.X:XXXX/AppName/"
    custom_attributes = {:wowza_urls => {:ios => "http://"+wowza_server+"mp4:"+video[:name])+"/playlist.m3u8", :android => "rtsp://"+wowza_server+video[:name])}}

    videos << video.merge(custom_attributes)
end

render :json => videos, status: :ok

1 个答案:

答案 0 :(得分:0)

这就是jbuilder的真正含义。

  

Jbuilder为您提供了一个简单的DSL,用于声明按摩巨型哈希结构的JSON结构。

你开始按摩一个巨大的哈希结构。

我假设这是一个索引视图,在这种情况下它看起来像这样:

json.array! @videos do |video|
  json.my_field video.my_field
  json.iphone_url video.iphone_url
  json.android_url video.android_url
end

app/model/video.rb

class Video
  def iphone_url
    "some_url_to_build"
  end
  ...
end