2

免責事項:私はRails3.2を使用しています。具体的には、Rails 3inActionの本では次のようになっています。

ユーザーモデルには、attr_accessible attr_accessible:email、:password、password_confirmation、:remember_meがあります。

ユーザーモデルには:adminがリストされていないため、params [:user]の一部として一括割り当てすることはできません。


app / views / admin / users / _form.html.erb内のform_forブロックは、管理者がユーザーを管理者として設定できるようにするためのチェックボックス要素を設定します。

`<%= f.check_box:admin%> <%= f.label:admin、"管理者ですか? " %>


app / controllers / admin / users_controller.rb

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

行@user.admin= params [:user] [:admin] == "1"はadmin属性をtrueに設定する必要がありますが、大量割り当てエラーが発生し、@user.admin属性をtrueに変更できなくなります。


ユーザーモデルでメソッドを定義するとともに、コンソールを介して一括割り当てせずにadmin属性をtrueに設定できます。

def make_admin
  self.admin = true
end

これは同じことを達成しますが、派手なことは何もありません。

ユーザーがチェックボックスを介してビューとコントローラーを使用して作業できるように、admin属性をTRUEに割り当てるにはどうすればよいですか?

adminパラメーターをparams[:user] [:admin])から削除または分離する方法はありますか?

4

2 に答える 2

2

config.active_record.mass_assignment_sanitizer = :strictdevelopment.rb ファイルの行をコメントアウトすると、先に進むことができました。

于 2012-03-16T20:32:02.227 に答える
1

大量代入保護についてコメントするのは悪い考えです。

まとめて割り当てたい場合:adminは のリストに追加してみてはいかがでしょうか。attr_accessible

情報については、これを入力すると:

@user = User.new(params[:user])
@user.admin = params[:user][:admin] == "1"  
if @user.save

@user.admin = ...一括代入エラーをスローするのはではなく、行User.new(params[:user])

とにかく、チェックボックスの値を取得したいが、一括割り当てしたくない場合は、これを試してください:

admin = params[:user].delete(:admin)
@user = User.new(params[:user])
@user.admin = admin == "1"  
if @user.save

一括割り当て保護を再度有効にすることを忘れないでください;)

于 2013-01-13T21:05:27.670 に答える