我有一個ActiveRecrod
模型User
和一個單獨的類UsersFilter
,它是完全用於過濾模型。假設UsersFilter
接受參數散列params = {min_age: '18', max_age: '30', admin: 'true'}
。所有的值都是字符串。如果我直接將這些值傳遞給ActiveRecord
,則查詢將起作用。但是,我也希望能夠在我的代碼中使用這些值,以便可以圍繞它創建一些邏輯。所以爲了做到這一點,我需要手動輸入這些值。所以UsersFilter
可能是這樣的:如何爲非ActiveRecord支持的類執行自動類型轉換?
class UsersFilter
include ActiveRecord::AttributeAssignment
attr_accessor :min_age, :max_age, :admin
def initialize(params)
params[:min_age] = params[:min_age].to_i
params[:max_age] = params[:min_age].to_i
params[:admin] = ActiveRecord::Type::Boolean.new.type_cast_from_user(params[:admin])
assign_attributes(params)
end
# some query methods
end
所以我的問題是 - 有一個導軌模塊,我可以按順序自動出現有這樣的類型轉換拌入?
P.S.我想,我需要在每個屬性和它的類型之間添加一個映射。
我不確定是否有任何Rails模塊可以混合使用(Rails 4.2及以下版本中沒有),但可以查看[dry-types](http:// dry-rb。 org/gems/dry-types /)允許爲類定義類型和值強制的gem –