2011-12-08 30 views
4

目前,我有這個方法在控制器:我怎麼能簡化這Rails 3的控制方法

def show 
    property = Property.find(params[:id]) 
    respond_to do |format| 
    format.xml { render :xml => property.to_xml(:except => [:address1, :address2, :analysis_date, :analysis_date_2, ...]) } 
    format.json { render :json => property.to_json(:except => [:address1, :address2, :analysis_date, :analysis_date_2, ...]) } 
    end 
end 

好像我可以重構這個代碼使用respond_with,但我不知道如何自定義輸出。我是否需要重寫as_json和to_xml方法以自定義返回的數據?如果我重寫這些方法,屬性關聯是否仍然會被正確處理?例如,一個房產有許多租戶和許多承包商。我可能還需要返回這些元素。

我會假設控制器方法可以簡化爲此。

def show 
    property = Property.find(params[:id]) 
    respond_with(property) 
end 

回答

1

respond_with方法有兩個參數:resources*&block,所以你應該能夠做到這一點:

def show 
    property = Property.find(params[:id]) 
    respond_with(property, :except => [:address1, 
            :address2, 
            :analysis_date, 
            :analysis_date_2, 
            ...]) 
end 

而且只記得,那爲了我們respond_with正常,你需要添加respond_to :html, :json, :xml位於控制器的頂部。所以respond_with知道什麼啞劇響應。