點擊圖片查看視圖
Ransack 生成了以下查詢,SELECT "sheets".* FROM "sheets" WHERE ("sheets"."id" > 5)
但我想在查詢中實作公式SELECT "sheets".* FROM "sheets" WHERE (((score1 score2)/2) > 5) 基本上我想比較公式而不是屬性
uj5u.com熱心網友回復:
為了實作這一點,您需要實作自定義ransacker。
就像是
class Sheet < ApplicationRecord
ransacker :average_score do |parent|
(parent.table[:score1] parent.table[:score2]) / 2
end
end
然后你可以使用通用的 ransack 語法。例如average_score_gt或使用更高級的版本(我相信)
Sheet.ransack(
conditions: [{
attributes: ['average_score'],
predicate_name: 'gt',
values: [5]
}]
)
uj5u.com熱心網友回復:
是的,這可以使用 ActiveRecord 來完成。我更喜歡從引數中獲取用戶選擇的值。
引數:
{ filters: [{column: "id", operator: ">", value: 5}] }
有了這個,您可以在后端構建條件。
condition = ActiveRecord::Base.sanitize_sql('id > 5')
然后您可以將其傳遞給您的查詢。
Sheet.where(condition)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407790.html
標籤:
上一篇:`bin/railsserver`打開一個文本檔案而不是運行本地服務器
下一篇:Rails控制臺無法啟動?
