RoR活动记录限制显示扩展更新

时间:2014-06-30 20:31:46

标签: ruby-on-rails-3

我坚持这一点,问题/答案太深,或者不符合我的概率。我认为我的问题很容易通过RoR和rails的标准问题来解决。我还没有找到我的导轨'我得到了它'

想象一下(抽象情况)我想存储密码(不,我不在rl中)。我有一个(ID), name, password_clear, password_hash的表密码。

那么我想做什么/有:

如果有人在任何视图中触及password_clear我想要错误 我有一个附加password(字段?)用于更新;我带的这个

class Passdata < ActiveRecord::Base
  attr_accessible  :name,:password
  def password
     '********' 
   end
   ...

但是在更新?如果密码已更改,我想更新password_clear, password_hash并解除password

所以我卡住了

请在哪里找到文件!

1 个答案:

答案 0 :(得分:0)

PREMISE 我不喜欢用这种代码阻塞ActiveRecord对象。但是,这仍然是仍然是“Rails Way”

我还假设,通过“触摸”,您打算“访问”,并且只想在password_clear上更新password_hash#save

class Passdata < ActiveRecord::Base
  attr_accessible  :name

  def password
    '********' 
  end
  def password=(value)
    write_attribute(:password_clear, @password)
    self.password_hash = @password
  end

  def password_hash=(value)
    # do some kind of hashing
  end

  # noone can access password_clear in a canonical way
  def password_clear
    raise Passdata::AccessDenied.new
  end
end

class Passdata::AccessDenied < StandardError; end

您可以选择使用before_save挂钩来更新密码。

但是,您确实不应将用户的明确密码存储在数据库中!那就是糟糕的代码......