1

私がモデルに持っていた以前のRails 4

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation

  ...
end

しかし、今はをstrong_parameters置き換えたprotected_attributesので、コメントして使用しますpermit

これで、属性を許可せずにアクセスできることがわかりました。

私はこれrails cを行うことができます:

2.0.0p247 :002 >   User.new(admin: "1")
 => #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil, password_digest: nil, remember_token: nil, admin: true> 

2.0.0p247 :016 >   user = User.new(name: 'Nir', email: 'nir@example.com', password: 'foobar', password_confirmation: 'foobar', admin: "1")
 => #<User id: nil, name: "Nir", email: "nir@example.com", created_at: nil, updated_at: nil, password_digest: "$2a$10$xVnY8ydd5SoaLVipK5j4Del40FrOmu4bKypGjBEwvms7...", remember_token: nil, admin: true>

明らかに管理者属性を設定および変更できない場合。できるuser.toggle(:admin)はずです。

それで、私が理解していないこと、または正しくすべきことは何ですか。そして、このテストに合格する方法:

  describe "accessible attributes" do
    it "should not have allow access to admin" do
      expect do
        User.new(admin: "1")
      end.to raise_error(ActiveModel::MassAssignmentSecurity::Error)
    end
  end
4

1 に答える 1

1

ユーザーがadminプロパティを設定できないようにするには、メソッドのパラメーターとして追加しないでください。permit

params.require(:user).permit(:name, :whatever_else_you_allow)

ここでのキーワードは次のとおりです: params(パラメータを扱います) とpermit(許可するプロパティをレールに伝えます)。

Strong Parametersホワイトリストに登録されるまで、アクティブなモデルの一括割り当てでアクション コントローラーのパラメーターを使用することを禁止します。ただし、テストでは、プロパティをモデルに直接設定します。それを妨げるものは何もありません。

于 2013-07-13T21:50:59.860 に答える