2015-06-16 46 views
0

是否有任何方法從默認的ActiveRecord'all','where','find'等產生的結果集中刪除敏感字段?RoR:從響應中刪除敏感字段

在我用來學習ruby的一個小項目中,我在每個對象中都提到了User,但出於安全原因,我不想公開用戶的id。當我使用簡單的HTML響應時,只需簡單地不使用它就很容易刪除user_id。但對於一些任務,我想回使用類似一個JSON:

def index 
    @my_objects = MyObject.all 

    respond_to do |format| 
    ... 
    format.json { render json: @my_objects, ...} 
    ... 
    end 
end 

如何防止USER_ID要上市?有什麼辦法可以創建一個幫助刪除敏感字段嗎?

回答

0

您可以使用as_json來限制在JSON響應中序列化的屬性。

format.json { render json: @my_objects.as_json(only: [:id, :name]), ...} 

如果你希望把它的默認值,然後簡單地覆蓋在模型本身

class MyObject 
    def serializable_hash(options = nil) 
    super((options || {}).merge(only: [:id, :name])) 
    end 
end 

儘管這種方法的方法是快速有效的,它快速地很快成爲不可維護爲您的應用變得足夠大,以便具有用於相同類型對象的多個模型和可能不同的序列化。

這就是爲什麼最好的方法是將序列化委託給序列化對象。這很容易,但它需要一些額外的工作來創建課程。

序列化程序只是一個返回模型實例並返回JSON就緒哈希的對象。有幾個可用的庫,或者你可以建立自己的庫。

+0

太快了!我想我現在會用as_json(除了:[:user_id]),但我會考慮這個序列化程序對象。謝謝。 – Pedro