在Rails中过滤json渲染

mon*_*ike 18 json ruby-on-rails ruby-on-rails-3

如果我只想返回的最佳方式是什么:id和:JSON中的name字段

到目前为止,我有:

format.json { render :json => @contacts.map(&:attributes) , :only => ["id"]}
Run Code Online (Sandbox Code Playgroud)

但是"name"属性在:only部分中不起作用,因为它不是数据库中的列(它在模型中定义为firstname + lastname)

谢谢!

小智 33

Rails 3支持以下过滤器选项.就这么简单

respond_to do |format|
  format.json { render json: @contacts, :only => [:id, :name] }
end  
Run Code Online (Sandbox Code Playgroud)

  • 实际上因为name是一个方法,我相信它将呈现json:@contacts,only:[:id],方法:[:name] (7认同)

leb*_*eze 30

您可以传递:methods给to_json/as_json

format.json do
  render :json => @contacts.map { |contact| contact.as_json(:only => :id, :methods => :name) }
end
Run Code Online (Sandbox Code Playgroud)

或者,您可以手动构建哈希

format.json do
  render :json => @contacts.map { |contact| {:id => contact.id, :name => contact.name} }
end
Run Code Online (Sandbox Code Playgroud)

请参阅:http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html#method-i-as_json