用params覆盖as_json方法

时间:2011-09-02 08:50:52

标签: ruby-on-rails json

首先,我使用的是Rails 3.0.6和Ruby 1.9.2

我有一个带有两个不同动作的控制器,它们都应该返回一个json对象,但是具有不同的格式。因此,我重写了as_json方法,以我自己的格式编写JSON对象。问题是我不知道如何将params传递给as_json方法,因为它被Rails自动调用。

我的代码如下所示:

class MyController < ApplicationController
  def action1
    # my code
    respond_to do |format|
      # Render with :json option automatically calls to_json and this calls as_json
      format.js  { render :json => @myobjects }
    end
  end

  def action2
    # a different code
    respond_to do |format|
      # This action should return a JSON object but using a different format
      format.js  { render :json => @myobjects }
    end
  end

end



class MyModel < ActiveRecord::Base
  def as_json(options = {})
    # I would like to add a conditional statement here
    # to write a different array depending on one param from the controller
    {
      :id => self.id,
      :title => self.description,
      :description => self.description || "",
      :start => start_date1.rfc822,
      :end => (start_date1 && start_date1.rfc822) || "",
      :allDay => true,
      :recurring => false
    }
  end

end

请注意,@ myobjects是一个对象的集合,其类是MyModel。

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

在控制器中显式调用它并传递params。 as_json将返回字符串并在字符串上调用as_json返回自身。这是很常见的做法。

respond_to do |format|
  # Render with :json option automatically calls to_json and this calls as_json
  format.js  { render :json => @myobjects.as_json(params) }
end