在创建Rails后将字段设置为只读

时间:2010-09-26 14:54:41

标签: ruby-on-rails model

我想在初始创建后保护用户生成的字段。

我在设置项目时要求用户输入一个唯一的名称,我希望在创建后停止更改。

有没有办法在Rails中执行此操作?我可以先将其设置为attr_accessible,然后将其切换为attr_protected吗?

干杯

5 个答案:

答案 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方法允许您这样做,请参阅:

API Docs

答案 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