2017-10-06 50 views
3

我是Ruby的新手,所以這個問題對你來說可能看起來很愚蠢,是的。但仍... 我有一個模型組,當我運行這個RoR - Model.all,但沒有created_at和updated_at字段

class GroupsController < ApplicationController 
    prepend SimpleCommand 
    ... 
    def index 
     @group = Group.all 
     render json: @group 
    end 
    ... 
    # some other stuff 

...然後我得到這樣與陣列響應:

[ 
    { 
    "id": 1020, 
    "name": "НІ-16-1", 
    "has_subgroups": true, 
    "created_at": "2017-09-29T10:14:08.000Z", 
    "updated_at": "2017-09-29T10:14:08.000Z" 
    } 
... 
] 

但我不想要有這兩個最後的字段,所以我的回答是 如何擺脫響應中的「created_at」和「updated_at」字段?

UPD:

發現在原來的問題一個很好的解決方案,我不小心做了一個重複的。繼續閱讀吧

+0

@Cyzanfar哦,謝謝。我試過幾次這樣的谷歌類似的東西,但從來沒有遇到與Yosh聯繫的答案。我用那裏的答案來解決我的問題。 – Volkeee

回答

1

每當您向視圖提供對象時,JSON Rails在內部都會調用函數as_json。擺脫這兩個領域的一種方法是重寫功能,在您的Group型號:

class Group < ActiveRecord::Base 
     def as_json(options={}) 
     { id: id, 
      name: name, 
      has_subgroups: has_subgroups 
     } 
     end 
    end 

或者作爲@MrYoshiji建議你可以過濾出來,像這樣:

render json: @groups.to_json(except: [:created_at, :updated_at]) 
+0

'as_json'已經接受'only:[:some,:field]'和'except:[:other,:field]'(https://apidock.com/rails/ActiveResource/Base/as_json)選項 – MrYoshiji

+1

*認爲@MrYoshiji說的(在另一個評論線程中)是使用模型中的''as_json''方法*隨時*排除'created_at'和'updated_at' * *'Group'模型是轉換爲json。這是通過你的更新來解決的(使用'to_json'調用的參數)。但是,您現在在控制器中具有與我提議的方法相同數量的業務邏輯(比如它)。 – jvillian

+0

@jvillian我確認。您的(cyczanfar's)解決方案通過整個應用程序的「Group#as_json」調用來限制可用數據。在不同的*上下文*中,像'/ admin/groups.json',你可能需要那些'updated_at'和'created_at'的值 – MrYoshiji

1

Rails的配備的JBuilder默認情況下生成json響應。你只需要找到group/index.json.jbuilder並刪除裏面的created_atupdated_at。並改變你的控制器動作:

def index 
    @group = Group.all 
end 

,或者如果你需要支持其他格式:

def index 
    @group = Group.all 
    respond_to do |format| 
     format.json 
    end 
end 

你可以看到你沒有指定任何的Rails會默認使用您的JBuilder文件。

1

你可以簡單地做:

class GroupsController < ApplicationController 
    prepend SimpleCommand 
    ... 
    def index 
    render json: Group.pluck(:id, :name, :has_subgroups) 
    end 
end 

它可能無所謂你,但我覺得方法是更快,因爲它不會實例所有Group對象。

+0

我想這是一個需要考慮的折衷。如果你打算爲了簡單和代碼清晰,我不會使用這種方法,因爲你正在操縱控制器內的模型數據。你怎麼看? – Cyzanfar

+0

@Cyzanfar模型的作用是處理業務邏輯,而不是數據格式/序列化。串行器將是完美的地方來處理這個角色 – MrYoshiji

+0

是的,我同意理想的地方將在串行器。但絕對不是在控制器中... ... – Cyzanfar

相關問題