2012-02-25 56 views
0

在我的控制,我有:Rails的easyist方式具有某種屬性的創建散列,也嵌套

def search 
    @sog = Konkurrencer.where("titel like ?", "%#{params[:q]}%") 
    @kate = [] 
    @sog.each do |kat| 
    h = {} 
    kat.attributes.each{|k,v| h[k] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v } 
    @kate << h 
    end 
    respond_to do |format| 
    format.html 
    format.json { render :json => @kate } 
    end 

的問題是JSON包含模型中的所有屬性。我如何創建一個只有ID,url和titel的JSON?

JSON還應該包含關鍵字「url」,該關鍵字應該是關聯照片的URL。我用回形針。路徑是:@konkurrencer.photo.image.url

UPDATE: 我search.json.erb:

[ 
<% @sog.each do |kon| %> 
{"id":"<%= kon.id %>","titel":"<%= kon.titel %>"}, 
<% end %> 
] 

如何去掉,最後循環?

回答

1

看一看thisthis RailsCast

+0

我已經使用了json視圖。但有一個問題。我如何刪除最後一個循環的最後一個「,」? – 2012-02-25 22:21:35

1

創建要顯示的屬性列表的數組。使用select查詢方法僅在SQL請求中獲取這些字段。最後循環這個屬性來填充JSON數組:

def search 
    displayed_attributes = %w{id url titel} 

    @sog = Konkurrencer.select(displayed_attributes.join(',')).where("titel like ?", "%#{params[:q]}%") 
    @kate = [] 
    @sog.each do |kat| 
    h = {} 
    displayed_attributes.each do |attribute| 
     v = kat[attribute] 
     h[attribute] = v.respond_to?(:force_encoding) ? v.dup.force_encoding("UTF-8") : v 
    end 
    @kate << h 
    end 
    respond_to do |format| 
    format.html 
    format.json { render :json => @kate } 
    end 
end