Ruby on rails 如何检查rails 3中字段的字段类型
我有一个用户模型。像Ruby on rails 如何检查rails 3中字段的字段类型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个用户模型。像 class User < ActiveRecord::Base attr_accessor :username :campaign_id attr_accessible :name, :email, :username end 它会回来的 #<User id: 190, name: "sa", :email: "abc@gmail.com", username: "ab"> # 所以问题是:有没有办法检查一个属性,例如“name”是否是att
class User < ActiveRecord::Base
attr_accessor :username :campaign_id
attr_accessible :name, :email, :username
end
它会回来的
#<User id: 190, name: "sa", :email: "abc@gmail.com", username: "ab">
#
所以问题是:有没有办法检查一个属性,例如“name”是否是attr\u访问器或attr\u访问器?也许不是最好的解决方案,但通过查看,我想您可以检查类的
\u accessible\u attributes
字段中是否显示了:name
。我想您是想知道该属性是通过attr\u accessor创建的实例变量还是数据库中的实际列。您可以通过User.column\u names
获取模型的db列列表。因此,下面这样的类方法可以工作
# User.rb
def self.column_in_db?(attrib)
column_names.include?(attrib.to_s)
end
如果我理解正确,designeattr\u accessor:password
会在数据库中隐藏您的密码字段。为了避免这种情况,你可以做如下的事情
def raw_password
self[:password]
end
def raw_password= (new_password)
self[:password] = new_password
end
当然,这完全忽略了一个事实,即在数据库中以明文形式存储密码不是很安全。Desive为用户提供了足够的机制来管理他们自己的密码,因此您不应该将原始密码保留太久 您可以通过以下方式检查任何对象方法是否为attr\u访问器:
my_object.respond_to?(:name) && my_object.respond_to?(:name=)
返回值true表示:name的getter和setter都存在。这只是标准Ruby代码和attr_访问器方法的定义:
定义此模块的命名属性,其中名称为symbol.id2name,创建实例变量(@name)和相应的访问方法来读取它。还创建一个名为name=的方法来设置属性
您可以通过以下方式检查方法是否可访问:
MyObject.attr_accessible[:default].deny?(:name)
其中MyObject是模型的类名,name是要查询的属性。返回值false表示该属性是可访问的。如果不是为了添加测试/rspec,您能解释一下您试图实现的目标吗?实际上。我有一些现有的代码被设备覆盖。原始密码也保存在数据库中。但是对于设备,密码是一个属性访问器字段,因此在我看来,我无法显示密码。我有一些现有的代码被设备覆盖。原始密码也保存在数据库中。但是对于设备,密码是一个属性访问器字段,因此在我看来,我无法显示密码。因此属性密码是一个db列,Desive将其作为属性访问器。您想知道如何在视图中显示数据库中存储的密码吗?
MyObject.attr_accessible[:default].deny?(:name)