Ruby on rails 将数组添加到活动记录对象

Ruby on rails 将数组添加到活动记录对象,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,假设我有一个类似于以下内容的活动#show action: def show @campaign = Campaign.find(params[:id]) end 假设,我想在我的视图中显示我从YouTube API中获得的一些信息,这些信息是用变量编写的,所以Campaign#show现在看起来像这样: def show @campaign = Campaign.find(params[:id]) @views = Campaign.youtube_info(@campai

假设我有一个类似于以下内容的活动#show action:

 def show
   @campaign = Campaign.find(params[:id])
 end
假设,我想在我的视图中显示我从YouTube API中获得的一些信息,这些信息是用变量编写的,所以Campaign#show现在看起来像这样:

def show
  @campaign = Campaign.find(params[:id])
  @views = Campaign.youtube_info(@campaign.url) # this class method of Campaign
end
但是为了方便起见,我想合并@campaign和@views,并在@campaign中有类似的@campaign[:views][:view\u count]

据我所知,@campaing是ActiveRecord对象,@views是散列,不允许进行这种合并

在这种情况下,最好的方法是什么


提前感谢。

首先,作为普通Rails应用程序的一部分,您将向视图传递任意数量的对象。使用
@views
@campaign
一点问题都没有

然而,在你的情况下,事情写得很奇怪

首先,
views
应该是
Campaign
上的一个方法,它应该只调用
youtube\u info

奇怪的是,
youtube\u info
是类级方法,因为它需要从类的实例输入属性。它应该是一个实例方法,您只需在视图中调用该方法即可

如果要防止每次调用都对API进行额外调用,请缓存第一次调用的结果。“缓存”方法返回值的过程称为“记忆化”,您可以在Ruby世界中找到很多关于它的文章。以下是Ruby中非常常见的模式:

class Campaign < ActiveRecord::Base
  def youtube_info
    @youtube_info ||= perform_some_api_request(@url)
  end

  def views
    youtube_info['views']
  end
end
但是,第一个例子更好。没有理由将youtube\u info作为类级方法

class Campaign < ActiveRecord::Base
  def self.youtube_info(url)
    # ...
  end

  def views
    @views ||= Campaign.youtube_info(@url)['views']
  end
end