Oke, saya telah menemukan masalahnya.
Pertama-tama, saya berasumsi Anda menggunakan Rails 4. Alasan Anda mendapatkan kesalahan ini adalah karena attr_protected
dan attr_accessible
telah dihapus dari Rails 4 dan ditempatkan di permata mereka sendiri. Rails sekarang mendorong model perlindungan baru. Anda dapat membaca tentang ini di README
. Jika Anda ingin terus menggunakan perilaku lama, Anda harus menyertakan permata protected_attributes
. Semoga membantu.
EDIT:Saya telah menambahkan klarifikasi di bawah ini karena ini mungkin merupakan masalah umum dengan pengguna untuk meningkatkan ke Rails 4.
Jika Anda ingin terus menggunakan attr_accessible
, yaitu cara Rails 3, cukup tambahkan gem protected_attributes
ke Gemfile Anda.
Jika Anda ingin mulai melakukan sesuatu dengan cara Rails 4, Anda tidak boleh lagi menggunakan attr_accessible
. Sebagai gantinya, Anda harus memindahkan logika izin atribut ke pengontrol. Ini contohnya:
class UsersController < ApplicationController
def create
# Using params[:user] without calling user_params will throw an error because
# the parameters were not filtered. This is just some Rails magic.
@user = User.new user_params
if @user.save
# Do whatever
else
render action: :new
end
end
private
def user_params
# params.require(:user) throws an error if params[:user] is nil
if current_user.nil? # Guest
# Remove all keys from params[:user] except :name, :email, :password, and :password_confirmation
params.require(:user).permit :name, :email, :password, :password_confirmation
elsif current_user.has_role :admin
params.require(:user).permit! # Allow all user parameters
elsif current_user.has_role :user
params.require(:user).permit :name, :email, :password, :password_confirmation
end
end