2015-05-28 80 views
1

我在使用禁用的複選框時遇到問題。Rails,如何在選中時如何提交禁用複選框

我試過兩種方法。 第一:

= check_box "permissions", "permission_#{row}[create]", {checked: has_permission?(@user, permission, "create")}, 'true', 'false' 

此複選框視圖內停止,但也查,但提交時,它在我的PARAMS的價值看起來是這樣的:

"create"=>"false" 

所以,當我更新我的屬性,創建是在我的參數中從真實變爲虛假。

當禁用複選框被選中時,我怎樣才能發送真正的參數而不是假?

+0

嘗試第一個將'disabled'標誌設置爲true,所以像這樣:'<%= check_box「permissions」,「permission _#{row} [create]」,{checked:has_permission?(@ user,permission ,「create」)},'true','false',disabled:true%>'。這可能會阻止你的參數。沒有保證,但 – MCBama

+0

不在你的參數中的複選框應被視爲虛假。只有在檢查時纔將其視爲真。 –

+0

當一個html表單字段被禁用時,它不會被返回到服務器,所以它只會發送隱藏字段的值(這將是錯誤的)。如果您希望爲禁用字段返回「true」,您可以需要更新隱藏字段,或者讓您自己的隱藏字段將您發回的正確值。 – FuzzyJulz

回答

1

我想你之所以禁用這些複選框的原因是讓權限爲只讀。但是,通過使用瀏覽器調試工具,人們很容易從複選框中刪除disabled標誌,設置權限並提交。

因此,我建議在交給模型之前從params中刪除這些值,無論如何,例如將它們從允許的參數中排除,或者發行splice

這樣你仍然會顯示實際的權限,但忽略任何未經授權就更改它們的企圖。

+0

在這種情況下,我使用這行代替:'%input {:name =>「permissions [permission _#{row}] [grant]」,:type =>「CHECKBOX」,checked:has_permission?(@ user,permission ,「grant」)}'我禁用的參數不會被髮送到我的參數中。太棒了!但它不會發送未勾選的複選框值,如果用戶正在刪除權限,則需要該值。 – Jay

+0

不管他們是否被派送,都沒有太大的區別。惡意用戶可以製作任何請求,所以你最好在服務器端做好準備。 至於未檢查的值沒有被髮送,一個解決方案想到的僞代碼是這樣的:'如果user_has_permission_to_change?('permission_0 [創建]'); model.permitted = params ['permission_0 [create]'];結尾「(抱歉,評論中沒有花哨的格式)。 這將阻止沒有權限更新該值的用戶,但會使複選框適用於具有更改權限權限的用戶。 – SkyWriter

相關問題