0

Micheal Hartl の Ruby on Rails Tutorial Book に従っています。sample_app に名前とメールが存在するかどうかの検証をテストしています。Rails コンソールで

user = User.new(:email => "user@example.com")

存在しない名前の値をテストしますが、見返りを得ています。

attr_accessible is extracted out of Rails into a gem.
Please use new recommended protection model for params(strong_parameters)
or add 'protected_attributes' to your Gemfile.

私のuser.rbは、

class User < ActiveRecord::Base

attr_accessible :name, :email

validates :name, :presence => true
validates :email, :presence => true
end

strong_parameters の使い方がわからないので、Gemfile に protected_attributes を次のように追加しました。

source 'https://rubygems.org'

gem 'protected_attributes'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '4.0.2'

# Use sqlite3 as the database for Active Record
gem 'sqlite3'

# Use SCSS for stylesheets
gem 'sass-rails', '~> 4.0.0'

gem 'uglifier', '>= 1.3.0'


gem 'coffee-rails', '~> 4.0.0'


 gem 'therubyracer', platforms: :ruby
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'

group :doc do
 # bundle exec rake doc:rails generates the API under doc/api.
 gem 'sdoc', require: false
end
group :test do
gem 'rspec'
end

group :development do
gem 'rspec-rails'
end


# Use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.1.2'

# Use unicorn as the app server
# gem 'unicorn'

# Use Capistrano for deployment
# gem 'capistrano', group: :development

# Use debugger
# gem 'debugger', group: [:development, :test]

検証を機能させるにはどうすればよいですか?

4

3 に答える 3

1

attr_accessible :name, :emailRails 4 では、 User モデルから削除する必要があり ます。

代わりに、ユーザー コントローラーに強力なパラメーターが必要です。

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end

Rails チュートリアル (Rails バージョン 4) のユーザー コントローラーユーザー モデルのコード サンプルをご覧ください。

強力なパラメーターの詳細

于 2014-03-30T12:26:57.107 に答える
0

ここでの他の2つの答えはあなたが必要とするものですが、についての情報を追加するstrong_paramsために、それらが使用されている理由を概説したいと思いました:

これは、エンド ユーザーによる割り当てから属性を保護するためのインターフェイスを提供します。これにより、アクション コントローラーのパラメーターは、ホワイトリストに登録されるまで、アクティブ モデルの一括割り当てでの使用が禁止されます。

Mass Assignment (ここでよく説明されているように) は、コントローラーに任意のパラメーターを送信できることを意味するだけであり、事前の検証なしでそのデータをモデルで使用するため、悪いです (システム上のデータを編集できる可能性があります)。

この問題に対処するために、Rails 3 ではattr_accessible、特定のパラメーターのみがデータベースに渡されるようにする機能が導入されました。ただし、これをさらに安全にするために、Rails 4strong_paramsではコントローラー レベルでパラメーターを割り当てることが採用されています。

基本的に、次のものに置き換える必要がありますattr_accessible

#app/controllers/users_controller.rb
def new
    @user = User.new #-> creates new ActiveRecord object
end

def create
    @user = User.new(user_params)
end

private

def user_params
    params.require(:user).permit(:your, :params)
end

PSもprotected_attributesGemFileから削除します-大量割り当てエラーが発生します:)

于 2014-03-30T13:58:35.403 に答える