2011-12-21 63 views
0

我有一個Rails模型(持續使用Mongoid),可以由任何註冊用戶進行協作編輯。但是,我想只允許編輯任何特定的屬性,如果它以前是空的或零。只有以前是空的,才接受Rails模型屬性

例如,假設有人創建了一個對象,並將其title屬性設置爲"Test Product"。然後,另一位用戶出現並想爲price添加一個值,該值目前爲nil

在鎖定先前輸入的屬性的同時,執行此操作的最佳方法是什麼?

回答

2

窺視ActiveRecord::Dirty模塊可以用來做這樣的事情了一些不錯的實用方法:

NON_UPDATABLE_ATTRIBUTES = [:name, :title, :price] 
before_validation :check_for_previously_set_attributes 

private 
def check_for_previously_set_attributes 
    NON_UPDATABLE_ATTRIBUTES.each do |att| 
    att = att.to_s 
    # changes[att] will be an array of [prev_value, new_value] if the attribute has been changed 
    errors.add(att, "cannot be updated because it has previously been set") if changes[att] && changes[att].first.present? 
    end 
end 
0

最簡單的方法,我認爲,是形式本身爲它檢查。 只需說add:disabled =>如果人員不能編輯輸入字段,則爲true。

<% if @my_object.name %> 
    <%= f.text_field :name, :disabled => true %> 
<% else %> 
    <%= f.text_field :name, :disabled => true %> 
<% end %>  

(我覺得有寫這個代碼更漂亮的方式)

但是,通過使用該用戶具有視覺反饋,他不能做的事情,它始終是最好不要allor東西比給出錯誤信息

+1

你仍然需要模型驗證,所以用戶不能只是修改表單域並提交它。 – iwasrobbed 2011-12-21 15:19:03

+0

好點:)所以我會去gareth和我的帖子的組合 – 2011-12-21 15:26:43

相關問題