Rails - 将ActiveRecord转换为简单对象以动态添加字段

时间:2017-10-03 08:41:50

标签: ruby-on-rails ruby activerecord

我正从数据库中检索数据。然后我用JSON发送它。

enter image description here

问题是,我需要动态添加字段“campaign_name”。

def loadtimeline
    @act = Activity.order('created_at desc').paginate(:page => params[:page], :per_page => 40)

    @act.each do |item|
      item.attributes[:campaign_name] = item.campaign.name
    end

    respond_to do |format|
      format.json do
        render json: @act
      end
    end
end

最后,当我检查客户端时,新字段不会出现。

所以我告诉自己,这个对象可能与ActiveRecord模型有关。所以我试图将其转换为对象。

这可能还是有办法添加我需要的字段?

感谢您的帮助。

EDIT1。 我并不确切,但item.campaign属于其他模型广告系列。

class Activity < ActiveRecord::Base
  belongs_to :user
  belongs_to :campaign

  attr_accessor :campaign_name

  def item
    if item_path && item_id
      case item_path
        when /todo/
          Todo.find(item_id)
        when /content/
          Content.find(item_id)
        when /netlinking/
          Netlinking.find(item_id)
        else
          nil
      end
    end
  end
end

2 个答案:

答案 0 :(得分:2)

你可以用这样的东西来实现这个目标:

a = [[raw_input(), float(raw_input())] for i in xrange(int(raw_input()))] 
print a

然后渲染act数组 我认为使用视图更清晰。

答案 1 :(得分:1)

a = @act.to_json
b = JSON.parse(a)
b.each do |item|
 item["campaign_name"] = item.campaign.name
end

或单行

JSON.parse(@act.to_json).each do |item| item["campaign_name"] = item.campaign.name end