我正在使用ActiveAdmin,我試圖實現我自己的過濾器。自定義ActiveAdmin過濾器
- 過濾器按天/周/月的價格(虛擬屬性)
- 過濾器,大於和小於
businesses.rb
filter :period_eq, as: :select, collection: [['day', 'day'], ['week', 'week']]
filter :price_lteq, as: :string
filter :price_gteq, as: :string
業務。 rb
ransacker :period,
formatter: -> period {
from = {
day: Time.now.beginning_of_day,
week: 1.week.ago.beginning_of_day,
month: 1.month.ago.beginning_of_day,
year: 1.year.ago.beginning_of_day,
}[period.to_sym]
Business.where('updated_at >= ?', from).pluck(:id)
}, splat_params: true do |parent|
parent.table[:id]
end
ransacker :price do |parent|
# equivalent to Business.where('(owner_price + comission) >= ?', price)
end
我需要2個單獨的字段價格,而不是ActiveAdmin默認[lt,gt,eq]下拉列表。
我想不通,哪個Arel表情我應該放在歹徒身上?
什麼是我的問題的替代解決方案?我的意思是避免使用ransack。
UPDATE
我設法得到:價格過濾工作:
filter :price, as: :numeric_range
ransacker :price,
formatter: -> price {
price.to_s.gsub /[\u00A0\s]+/, ''
}, splat_params: true do |parent|
Arel::Nodes::InfixOperation.new('+',
parent.table[:comission], parent.table[:owner_price])
end
但還是需要幫助:段過濾
你有沒有試過爲'price_lteq'和'price_gteq'指定'as'選項?我認爲它在模型上查找是否存在列/屬性,或者忽略它們。 – codenamev
@codenamev謝謝,這工作。後續問題,我可以創建具有1個標籤和2個輸入字段(from,to)的過濾器嗎?我的代碼創建2個標籤的過濾器。 – leemour