0

ここでは単純な点に固執しているようです。「user」というフィールドが一意として設定されている「User」というモデルがあります。

新しい訪問者が私のサイトにいて、サインアップしたいと思っており、ユーザー名を選択してから「サインアップ」をクリックするとします。この場合、私のフィールド「username」はattr_accessibleである必要があります。

私が今達成したいのは、ユーザーが自分のアカウントを編集しているときに、フィールド「username」は編集できなくなったことです。

どうすればこれを実現できますか?

Bouns-Karma:私はCanCanをdeviseで使用しているので、admin-roleを持つユーザーが特定のユーザーのユーザー名を変更できるソリューションは素晴らしいでしょう!私の心は「user.adminでない限り」と何かを教えてくれます。しかし、私はコーディングをしていました-休憩が長すぎました。

とにかく-私はいくつかの答えがあることを願っています:)

4

1 に答える 1

5

更新時にカスタム検証を作成します。

class User
  attr_accessor :admin_action  # do not put in attr_accessible

  validate :freeze_username, :on => :update

  protected

  def freeze_username
    errors.add(:username, "cannot be changed") if self.username_changed? unless self.admin? || self.admin_action
  end
end

admin_actiontrue管理者が更新を行っている場合にコントローラーから設定できる仮想属性です。

于 2013-03-03T05:59:31.037 に答える