1
我有搜索表單和搜索結果張貼在同一頁面上。Ransack:表單提交時沒有返回任何內容,也沒有輸入搜索值
據我所知:ransack的默認值是,如果一個表單沒有被輸入到搜索字段的值被提交,那麼返回該特定資源的所有記錄。
如何更改它,以便如果用戶在搜索字段中輸入了沒有值的搜索,則返回無的記錄?
這不起作用:
if params["q"].values.present? # Always returns true because an array of empty strings returns true from method call: present?
# do this
else
# do that
end
無論是做這個的:
if params["q"].values.empty? # Always returns true because an array of empty strings returns true from method call: empty?
# do this
else
# do that
end
檢查params["q"].present?
無法正常工作或因爲每次提交表單時,是否有是否輸入值,這是傳遞給服務器的值:
# showing with pry
[1] pry> params[:q]
=> {"namesearch_start"=>"",
"city_cont"=>"",
}
[2] pry> params[:q].present?
=> true # always returns true
因此params["q"]
將始終存在,無論是否輸入值。
這適用於第一個請求,但不幸的是,所有其他請求這是行不通的。示例:用戶爲字段輸入「foo」的搜索值並單擊搜索。返回結果後,用戶刪除'foo'(現在不搜索值)並再次單擊搜索。即使沒有值,'params [:q]'也會出現,所以默認行爲將會被踢出:所有的記錄都被返回。 – Neil
'present?'和'blank'將檢查鍵*是否具有值*,因此如果'params [:q]'爲空,則'false'表示'present?','true'表示'blank ?',你可以決定怎麼做。只有當條件返回期望的結果時,纔可以推遲到Ransack。 – Mohamad
請參閱我更新的問題中的解釋。 – Neil