Ruby on rails 在活动记录JSON响应中添加非持久性属性

Ruby on rails 在活动记录JSON响应中添加非持久性属性,ruby-on-rails,ruby,json,api,ruby-on-rails-4,Ruby On Rails,Ruby,Json,Api,Ruby On Rails 4,无论何时调用该模型,都可以创建自定义模型属性并在默认情况下包含其值吗 我有一个名为Video的模型。它有一个名为name的属性。它包含视频的名称示例视频.mp4。我想为model创建两个名为iphone\u url和android\u url的自定义属性 这两个属性将有不同的URL与名称连接。因此,iphone\u url将具有http://link1/+name+/playlist.m3u8其中asandroid\u url将具有http://link2/+名称 当我调用该模型时,两个属性是否

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

我有一个名为
Video
的模型。它有一个名为
name
的属性。它包含视频的名称
示例视频.mp4
。我想为model创建两个名为
iphone\u url
android\u url
的自定义属性

这两个属性将有不同的URL与名称连接。因此,
iphone\u url
将具有
http://link1/+name+/playlist.m3u8
其中as
android\u url
将具有
http://link2/+名称

当我调用该模型时,两个属性是否都会自动添加(在JSON响应中)

我试过上面提到的解决方案

我可以通过使用
attr\u访问器
添加自定义属性,但它们的值始终为空。可能是因为需要先手动设置它们的值

那么如何做到这一点呢

编辑:目前,我正在这样做:

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
json.array! @videos do |video|
  json.my_field video.my_field
  json.iphone_url video.iphone_url
  json.android_url video.android_url
end
videos=Array.new
#脏的,但是有用
Video.all.each do| Video|
video=video.attributes
wowza_server=“X.X.X.X:XXXX/AppName/”
自定义_属性={:wowza_URL=>{:ios=>“http://”+wowza_服务器+“mp4:“+video[:name])+”/playlist.m3u8“,:android=>“rtsp://”+wowza_服务器+video[:name])}
视频,状态::确定
这才是真正的目的

Jbuilder为您提供了一个简单的DSL,用于声明JSON结构,这比处理巨大的散列结构要好得多

你开始按摩一个巨大的散列结构

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

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
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
这才是真正的目的

Jbuilder为您提供了一个简单的DSL,用于声明JSON结构,这比处理巨大的散列结构要好得多

你开始按摩一个巨大的散列结构

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

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
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