2

Ruby on Rails と、フォームを介して渡された params 変数を使用して変数を割り当てるプロセスについて質問があります。

class User
  attr_accessible :available_to_admins, :name
end

管理者のみが使用できるフィールドがあるとします。あなたが管理者ではないと仮定すると、フォームに available_to_admins 入力を表示しません。

その後、データを保存したい場合は、次のことを行います。

User.update_attributes(params[:user])

あなたが管理者であれば問題ありません。params[:user] には name と available_tu_admins が含まれ、管理者でない場合は名前のみが含まれます。

available_to_admins は attr_accessible パラメーターであるため、管理者以外のユーザーが available_to_admins 入力を含む変数に新しい値を挿入できないようにするにはどうすればよいですか?

4

2 に答える 2

2

を。コントローラーでユーザーの役割を確認できます。

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
end

def update
  @user = User.new(params[:user])
  @user.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
end

b. モデルに before_save / before_update コールバックを追加できます

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
  before_save :check_role
  before_update :check_role
  def check_role
    self.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
  end
end
于 2010-04-16T12:11:10.717 に答える
0

このトピックに関する興味深い Railscast がありました。

動的attr_accessible

于 2012-07-21T18:31:22.657 に答える