× 說心事 政治時事 生活 運動 汽車 機車 自行車 相機 科技 理財 旅遊美食 娛樂 健康 美麗時尚 人際關係 文學故事 關於《思書》
吃喝玩樂 關於《思書》

Rails 怎麼檢查 Params 存不存在?

紅寶鐵軌客
來關注...
關注:紅寶鐵軌客
關注有什麼好處?:當作者有新文章發佈時,「思書日報」就會匯總自動通知您,讓您更容易與作者互動。
x
紅寶鐵軌客
Rails 使用中,折磨中,享受中......
Victorian vintage round cut ruby engagement ring in 14k yellow gold 7mm center vs g h 984
    很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
     
    就,這會一點點,那會一點點⋯⋯
作者最新發佈的文章:
  • Rails 的 joins 中 select 的欄位不會在 console 中顯示
  • Rails redirect_to 到分頁中的某一頁
  • Rails 簡易的讓字串變乾淨
作者最近參與的討論:
  • Rails 常見資安陷阱與解決方法
現在就加入《思書》,你就可以關注本作者了!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,讓你寫作不再受限,討論更深入真實,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入
Rails 使用中,折磨中,享受中......
2017/11/27
76   0  

params.has_key?()

我用過各種方法,params[:one].blank? 或是 params[:one].present? 這兩個可能是最常用的,也用了很久了,其實也沒有很大的問題,但是我現在改用

params.has_key?(:one) 

為什麼?幾個問題,但主要是一些模糊地帶,如:

  • "".blank?  # = true
  • " ".blank? # = true

所以如果 params[:one]="",這一定會被認成 blank,一般來說,不會有空白這樣的 params,但是萬一真的發生,總是麻煩,進一步,如果要百分百確定,我現在是用以下的做法:

if params.has_key?(:one) && params[:one].to_i != 0

運用 Ruby 的先來後到,先確定有這的 params,在確定這個 params 的值是正確的,這樣就萬無一失了。

Params 還有一些很酷炫的寫法,

params.dig
params = ActionController::Parameters.new(foo: { bar: { baz: 1 } })
params.dig(:foo, :bar, :baz) # => 1
params.dig(:foo, :zot, :xyz) # => nil

params2 = ActionController::Parameters.new(foo: [10, 11, 12])
params2.dig(:foo, 1) # => 11

用 Dig 在 Rails 的 form_for 中,可以用 params.dig(:user, :name),去讀 user 的 name,好不好用,看人,但是很酷!

另一個也很酷,這就一定要用了:

present_in?

簡單好用的檢查 params

locale_options = [:en, :zh-TW] 
...

params[:locale].presence_in(locale_options) || :en

 

寫這篇是為了紀念我又忘記給 AJAX 中設定 locale params ⋯⋯ 

關於作者
很久以前就是個「寫程式的」,其實,什麼程式都不熟⋯⋯
 
就,這會一點點,那會一點點⋯⋯


標籤: present_in? x 1 dig x 1 has_key? x 1 params x 1 rails x 26

分享:


參與討論!
x
現在就加入《思書》,馬上參與討論!
《思書》是一個每個人的寫作與論壇平台,特有的隱私管理,用筆名來區隔你討論內容,讓你的討論更深入,而且免費。 趕快來試試!
還未加入《思書》? 現在就登錄! 已經加入《思書》── 登入
思書 Scrivinor 不斷的在強化體驗與功能,我們很期待您的建議,請與我們聯繫: support@scrivinor.com