我想在初始创建后保护用户生成的字段。
我在设置项目时要求用户输入一个唯一的名称,我希望在创建后停止更改。
有没有办法在Rails中执行此操作?我可以先将其设置为attr_accessible,然后将其切换为attr_protected吗?
干杯
答案 0 :(得分:10)
您可以为模型添加自定义验证方法:
# Project model
validate_on_update :forbid_changing_name
def forbid_changing_name
errors[:name] = "can not be changed!" if self.name_changed?
end
答案 1 :(得分:9)
如何将其设置为只读? attr_readonly
方法允许您这样做,请参阅:
答案 2 :(得分:0)
我会将其设置为:attr_protected并创建一个新的“新”方法:
def self.my_new(attributes = {})
obj = new(attributes)
obj.my_protected_attribute = attributes[:protected_attribute]
obj
end
答案 3 :(得分:-1)
如果我这样做,我会在客户端使用javascripts进行此操作。 例如:创建一个javascript函数,在用户输入值后将文本框属性设置为readonly。我可以看到这样做是客户端有2个优点
1 - 您不想通过服务器轮来锁定值 2 - 您可以灵活地允许用户根据需要更改值(通过单击按钮或其他内容)
欢呼声
sameera
答案 4 :(得分:-1)
如果您知道属性的名称,也可以在控制器中处理
class MyModel < ActiveRecord::Base
attr_protected :super_cool
end
然后在控制器中:
def create
@my_model = MyModel.create(params[:my_model])
@my_model.super_cool = params[:my_model][:super_cool] unless params[:my_model].nil?
if @my_model.save
..
else
..
end
end