2

我正在使用simple_form 2.0。我有一個布爾字段'股票',我試圖提交作爲單選按鈕。在simple_form中,如果該字段被禁用,則無法提交boolean作爲radio_button

<%= f.input :stock , :as => :radio_buttons, :collection => [['Purchase Indent', false], 
['Stock', true]], label:"Shipments From" , :disabled => true%> 

股票被標記呈現形式之前爲假。

Before submitting the form

一旦我提交表單本身從參數丟失的股票,我得到這個錯誤。

After submitting the form.

因爲我確認股票的包容性。

validates_inclusion_of :stock, :in => [true, false] 

它工作正常,如果我不禁用該字段。但我不希望用戶能夠改變它。 請幫忙。

更新

的原因是,殘疾人領域永遠不會發送。
http://www.w3.org/TR/html401/interact/forms.html#h-17.12

似乎使它只讀將有所幫助。
https://github.com/plataformatec/simple_form/pull/367

但是,消息是單選按鈕不能被設爲只讀。
Why can't radio buttons be "readonly"?

回答

1

一種選擇是分離的按鈕和只禁用未選擇的選項:

<%= f.input :stock , :as => :radio_buttons, collection: [['Purchase Indent', false]], label:"Shipments From" %> 
<%= f.input :stock , :as => :radio_buttons, collection: [['Stock', true]], label:"" , :disabled => true %> 

另一種選擇是增加一個隱藏的輸入與所希望的值。

+0

這不是真正的股票真應該始終被禁用。庫存變量的值在控制器中設置。應該是這樣的,兩個單選按鈕都應顯示,但不應允許更改。 – Bot

+0

你可以添加一個隱藏的輸入與所需的值,並禁用單選按鈕? – Sim0n222

1

切記不要信任用戶提交的數據。 我認爲你不應該像這樣構建它,因爲即使你禁用表單元素,黑客也可以改變HTML /提交人爲請求。隱藏的表單元素不能解決這個問題,因爲任何具有dom資源管理器的人都可以更改這些值。當然,如果你的模型檢查並拒絕這種事情,這不是一個很大的問題。

因此,要解決特定的問題,只需執行已有的視覺效果,並在控制器的更新或創建操作中重新插入預期值。

欲瞭解更多信息, owasp,但我喜歡Google的一些人在幾年前就喜歡「如何打破網絡軟件」這本書。

相關問題