Mam ten model w Ruby, ale rzuca ActiveModel::ForbiddenAttributesError
class User < ActiveRecord::Base
attr_accessor :password
validates :username, :presence => true, :uniqueness => true, :length => {:in => 3..20}
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, :uniqueness => true, format: { with: VALID_EMAIL_REGEX }
validates :password, :confirmation => true
validates_length_of :password, :in => 6..20, :on => :create
before_save :encrypt_password
after_save :clear_password
def encrypt_password
if password.present?
self.salt = BCrypt::Engine.generate_salt
self.encrypted_password= BCrypt::Engine.hash_secret(password, salt)
end
end
def clear_password
self.password = nil
end
end
kiedy uruchamiam tę akcję
def create
@user = User.new(params[:user])
if @user.save
flash[:notice] = "You Signed up successfully"
flash[:color]= "valid"
else
flash[:notice] = "Form is invalid"
flash[:color]= "invalid"
end
render "new"
end
na ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
.
Czy możesz mi powiedzieć, jak pozbyć się tego błędu lub ustalić odpowiedni formularz rejestracyjny użytkownika?
protected_attributes
klejnot do użyciaattr_accessible
.Odpowiedzi:
Wydaje mi się, że używasz Rails 4. Jeśli tak, wymagane parametry należy oznaczyć jako wymagane.
Możesz to zrobić w ten sposób:
źródło
strong_parameter
klejnot. Jest to omówione w Rails Guides: guide.rubyonrails.org/… .Dla osób używających CanCan . Ludzie mogą tego doświadczyć, jeśli używają CanCan z Railsami 4+ . Spróbuj AntonTrapps jest raczej czystą obejście problemu tutaj aż CanCan zostanie zaktualizowany:
W
ApplicationController
:oraz w kontrolerze zasobów (na przykład NoteController):
Aktualizacja:
Oto kontynuacja projektu CanCan o nazwie CanCanCan , która wygląda obiecująco:
CanCanCan
źródło
load_resource
lub używanieload_resource :except => :create
rozwiązało problem. Sprawdź oryginalną odpowiedź tutajJest łatwiejszy sposób na uniknięcie Mocnych parametrów, wystarczy przekonwertować parametry na zwykły skrót, ponieważ:
To oczywiście niweczy cel silnych parametrów, ale jeśli jesteś w sytuacji takiej jak moja (ja sam zarządzam dozwolonymi parametrami w innej części mojego systemu), to załatwi sprawę.
źródło
unable to convert unpermitted parameters to hash
Jeśli korzystasz z ActiveAdmin, nie zapomnij, że w bloku rejestru modelu znajdują się także parametry perm_params
Należy je ustawić razem z tymi w kontrolerze:
W przeciwnym razie pojawi się błąd:
źródło
Dla osób używających CanCanCan :
Ten błąd pojawi się, jeśli CanCanCan nie będzie w stanie znaleźć właściwej metody params .
W przypadku
:create
akcji CanCan spróbuje zainicjować nową instancję z dezynfekowanym wejściem, sprawdzając, czy kontroler zareaguje na następujące metody (w kolejności):create_params
<model_name>_params
na przykład article_params (jest to domyślna konwencja w szynach do nazywania twojej metody param)resource_params
(ogólna nazwa metody, którą można określić w każdym kontrolerze)Ponadto
load_and_authorize_resource
można teraz wybraćparam_method
opcję określenia niestandardowej metody w kontrolerze, aby uruchomić w celu dezynfekcji danych wejściowych.Możesz powiązać
param_method
opcję z symbolem odpowiadającym nazwie metody, która zostanie wywołana:źródło: https://github.com/CanCanCommunity/cancancan#33-strong-parameters
źródło
Alternatywnie możesz użyć klejnotu Chronione Atrybuty , ale to nie wystarcza, aby wymagać silnych parametrów. Jeśli jednak aktualizujesz starszą aplikację, Chronione Atrybuty zapewniają łatwą ścieżkę aktualizacji do czasu, kiedy będziesz mógł zmienić atrybut attr_accessible na silne parametry.
źródło
Jeśli korzystasz z Rails 4 i pojawia się ten błąd, może się to zdarzyć, jeśli korzystasz
enum
z modelu, jeśli zdefiniowałeś za pomocą takich symboli:Formularz przejdzie powiedz selektor radia jako parametr ciągu. Tak się stało w moim przypadku. Prostym rozwiązaniem jest zmiana
enum
na ciągi zamiast symboliźródło