我一直在用Rails構建Web API。對於這種情況, 我需要爲API定義一些資源。 所以很難弄清楚在哪裏放些東西來縮小查詢結果。導軌;在哪裏放置查詢縮小界面
我們可以在AR scope
指定東西;
class Post < ActiveRecord::Base
scope :published, -> { where(published: true) }
end
或 與class method
;
class Post < ActiveRecord::Base
def self.published
where(published: true)
end
end
和serverside resources
(I使用jsonapi-resource);
class ContactResource < JSONAPI::Resource
attributes :name_first, :name_last, :full_name
def full_name
"#{@model.name_first}, #{@model.name_last}"
end
def self.updatable_fields(context)
super - [:full_name]
end
def self.creatable_fields(context)
super - [:full_name]
end
end
什麼讓你決定在哪裏放這些類型的查詢縮小界面。 這些之間有什麼區別。 (特別是class method
vs scope
很混亂。)
有什麼想法嗎?
如果我正確理解了jsonapi資源,它基本上只是一個將記錄轉換爲JSON的序列化程序。因爲你在上面做的是它屬於模型的數據庫範圍。範圍只是類方法的語法糖。 – max
作用域*是*類方法和[「使用類方法是接受作用域參數的首選方法。」](http://guides.rubyonrails.org/active_record_querying.html#passing-in-arguments)。所以根據官方的Rails指南,你的'published'範圍應該直接作爲類方法實現(即'def self.published')。 –
@max是的,這是串行器。那麼何時將方法放入串行器?我想我可以將方法放入序列化程序或範圍/ AR類方法來輸出縮小結果。 – Tosh