2014-03-30 47 views
0

我下面的邁克爾·哈特爾的Ruby on Rails的教程Book.I'm測試驗證​​的姓名和電子郵件在sample_app.In存在導軌控制檯,我跑軌道4驗證attr_acessible錯誤

user = User.new(:email => "[email protected]") 

來測試一個缺席的名字值,但我得到了回報;

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 

因爲我不知道如何使用我加protected_attributes strong_parameters我的Gemfile像這樣,

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] 

我怎樣才能得到我的驗證工作?

回答

3

Micheal Hartl的Ruby on Rails教程手冊使用rails3版本。但是你所做的項目是在rails4中。

Rails4使用強參數。如果你想要使用rails3語法,請添加「protected_attributes」gem並執行bundle install。 我會建議的是使用相同的rails4的新語法。而不是在用戶模型中使用attr_accessible,請在users_controller中創建一個私有方法。

private 

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

in Rails 4您需要從您的用戶模型中刪除 attr_accessible :name, :email

相反,你需要對你的用戶控制器強大的參數:

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

看看Rails的教程(Rails的版本4)代碼示例User controllerUser model

更多信息上strong parameters

0

這裏的其他兩個答案是你所需要的,但要加一些有關strong_params,我想概括爲什麼他們正在使用:

它提供了一個接口,用於保護從屬性最終用戶 分配。這使得禁止在活動模型質量分配使用 動作控制器參數,直到他們已被列入白名單

質量分配(as described so well here)是不好的,因爲它只是意味着你可以發送任何參數去你的控制器,它會使用該數據與模型沒有任何事先驗證(可能允許您編輯系統上的任何數據)

爲了解決這個問題,Rails 3引入了attr_accessible以確保只有某些參數被傳遞給數據庫。但是,爲了使這一更加安全,軌道4採用strong_params在控制器級別分配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也刪除您的Gemfile protected_attributes - 你」我會收到質量分配錯誤:)