簡體   English   中英

rails無法獲取符號參數

[英]rails can't get symbol params

我有一個模型,該模型具有名稱為status的屬性。 這是身份驗證;

validates_inclusion_of :status, :in => [:nil, :new, :old], :message => "......"

我為模型創建一個編輯表單,這是我的選擇輸入。

 =f.select :status, [["New Record", :new], ["Old Record", :old]], {:include_blank => false}

當我提交編輯表單時,我無法獲得符號狀態以及該區域的錯誤。
當嘗試使用“ to_sym”方法更改狀態參數時,它將起作用。

params[:my_model][:status] = params[:my_model][:status].to_sym

為什么要使用這種方法? 有什么方法可以將數據作為符號發送?

從HTML表單接收的數據始終是字符串,並且rails不會將這些類型的值自動轉換為符號。 通常,鍵是符號而不是值。

我建議將您的值(例如:new,:old等)視為字符串,然后情況將保持一致。 還要注意,您的數據存儲區很可能在沒有某種序列化的情況下無法處理符號(例如,它們將被轉換為yaml)。

請記住,即使在Rails視圖中編寫符號,所有符號也會被解析為HTML作為字符串。 HTTP沒有紅寶石符號的概念,因此您不能將數據作為符號發送。

在控制器中獲取參數后,如果要根據符號檢查參數,則有責任將其解析為符號。

從params [:something]中獲得的信息將始終是字符串。 數據庫中狀態的數據類型是什么?
我在想你可以做

validates_inclusion_of:status,:in => [nil,“ new”,“ old”],:message =>“ ......”

在HTTP請求中,沒有數據類型。 數據包裝在完全為字符串的查詢字符串或請求正文中。

Rails僅解析該字符串並將其轉換為稱為“ params”的哈希。 鍵的每個值都是基於請求的字符串或文件對象。 您永遠不會獲得符號作為哈希鍵的值。

嘗試像這樣使用字符串

'new', 'old'

這樣就可以避免函數調用to_sym

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM