2011-04-12 389 views
2

在使用serialize_with_options時,我意識到它不像我期望的那樣工作在數組中。在to_json上添加自定義屬性

因此,給定一個@posts數組(如自述文件中所示),調用@ posts.to_json將既不包含用戶,也不顯示只有標題。

不知道這是預期的行爲還是我錯過了一些東西,因爲我找不到任何相關的東西。

Using Rails 3.0.4

PS。在包含模型的JSON格式的2個自定義屬性時是否有其他選擇?

+0

能否請您詳細闡述稍微清楚你想達到什麼樣的?對於只顯示標題'@ post.to_json(:only =>:title)'應該這樣做。爲了將用戶包含在json中,可以執行'@ post.to_json(:include =>:user)' – rubish 2011-04-12 16:46:19

回答

2

考慮超載ActiveModel::Serializers::JSON.as_json這樣的:

class Post 
    def as_json(options) 
    # make sure options is not nil 
    options ||= {} 
    # call super with modified options 
    super options.deep_merge(methods: [:custom_attr1, :custom_attr2]) 
    end 

    def custom_attr1 
    "return first custom data" 
    end 

    def custom_attr2 
    "return second custom data" 
    end 
end 

#rspec this like that 
describe Post do 
    subject { Post.new } 
    it "has custom data" do 
    to_json.should include(
     { custom_attr1: "return first custom data", 
     custom_attr2: "return second custom data"}) 
    end 
end