我試圖找到ID大於200的所有用戶,但我在特定語法方面遇到了一些麻煩。Rails:使用大於/小於where語句
User.where(:id > 200)
和
User.where("? > 200", :id)
兼得失敗。
有什麼建議嗎?
我試圖找到ID大於200的所有用戶,但我在特定語法方面遇到了一些麻煩。Rails:使用大於/小於where語句
User.where(:id > 200)
和
User.where("? > 200", :id)
兼得失敗。
有什麼建議嗎?
試試這個
User.where("id > ?", 200)
我只測試了Rails中4,但有使用範圍與where
哈希獲得此行爲的有趣的方式。
User.where(id: 201..Float::INFINITY)
將生成SQL
SELECT `users`.* FROM `users` WHERE (`users`.`id` >= 201)
同樣可以爲小於與-Float::INFINITY
來完成。
我剛剛發佈了一個類似的問題,詢問有關這樣做的日期爲here on SO。
這個答案是Rails 4 IMO的最佳選擇。已經使用它很長一段時間,並完美的作品。 –
出於好奇,爲什麼這比被接受的答案更勝一籌? – mecampbellsoup
優越是誤導。一般來說,如果您能夠在字符串上使用哈希語法,那麼您的ARel查詢將獲得更多靈活性,這就是爲什麼許多人會喜歡此解決方案。根據您的項目/團隊/組織,您可能希望某些人能夠更輕鬆地查看代碼,以瞭解接受的答案。 – Aaron
如果你想有一個更直觀的文字,它存在一個名爲squeel的寶石,將讓你寫你的指令是這樣的:
User.where{id > 200}
注意「括號」字符{}和id
僅僅是一個文本。
所有您需要做的是squeel添加到您的Gemfile:
gem "squeel"
用Ruby編寫複雜的SQL語句時,這可能會緩解你的生活了很多。
我建議避免使用squeel。長期難以維護,有時會有奇怪的行爲。此外,它與某些活動記錄版本的車錯 –
我已經使用squeel一些年,仍然滿意。但也許值得去嘗試另一個ORM,比如續集(<> squeel),這看起來很有希望取代ActiveRecord。 – Douglas
一個更好的用法是在用戶模式來創建範圍where(arel_table[:id].gt(id))
短:
User.where("id > 200")
我認爲這必須是動態的,並且海報希望通過使用參數化查詢('where(「id>?」,200)'syntax)來避免SQL注入。這並沒有達到那個目標。 –
同樣來自厄尼·米勒 – cpuguy83
退房Squeel寶石是否有任何理由,更喜歡使用'',而?比內嵌'200'? – dukedave
它會自動轉義200(如果用戶可以輸入值,它可以避免SQL注入攻擊的可能性) – user1051849