Ich habe dieses Modell in Ruby, aber es wirft ein 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
wenn ich diese Aktion ausführe
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
auf ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]
.
Können Sie mir bitte sagen, wie ich diesen Fehler beseitigen oder ein ordnungsgemäßes Benutzerregistrierungsformular erstellen kann?
protected_attributes
zu verwendenden Edelstein hinzuattr_accessible
.Antworten:
Ich denke, Sie verwenden Rails 4. Wenn ja, müssen die erforderlichen Parameter als erforderlich markiert werden.
Vielleicht möchten Sie es so machen:
quelle
strong_parameter
Juwel bereitgestellt . Es wird in Rails Guides behandelt : guides.rubyonrails.org/… .Für diejenigen, die CanCan verwenden . Menschen können dies erleben, wenn sie CanCan mit Rails 4+ verwenden . Probieren Sie hier die ziemlich saubere Problemumgehungslösung von AntonTrapps aus , bis CanCan aktualisiert wird:
In der
ApplicationController
:und im Ressourcencontroller (zum Beispiel NoteController):
Aktualisieren:
Hier ist ein Fortsetzungsprojekt für CanCan namens CanCanCan , das vielversprechend aussieht:
CanCanCan
quelle
load_resource
oder verwendenload_resource :except => :create
löste das Problem. Überprüfen Sie die ursprüngliche Antwort hierEs gibt eine einfachere Möglichkeit, die starken Parameter überhaupt zu vermeiden. Sie müssen lediglich die Parameter in einen regulären Hash konvertieren:
Dies macht natürlich den Zweck starker Parameter zunichte, aber wenn Sie sich in einer Situation wie meiner befinden (ich verwalte die zulässigen Parameter in einem anderen Teil meines Systems selbst), wird dies die Arbeit erledigen.
quelle
unable to convert unpermitted parameters to hash
Wenn Sie ActiveAdmin verwenden, vergessen Sie nicht, dass sich im Modellregisterblock auch allow_params befindet:
Diese müssen zusammen mit denen in der Steuerung eingestellt werden:
Andernfalls erhalten Sie die Fehlermeldung:
quelle
Für diejenigen, die CanCanCan verwenden :
Sie erhalten diesen Fehler, wenn CanCanCan die richtige params-Methode nicht finden kann .
Für die
:create
Aktion versucht CanCan, eine neue Instanz mit bereinigten Eingaben zu initialisieren, indem überprüft wird, ob Ihr Controller (in der angegebenen Reihenfolge) auf die folgenden Methoden reagiert:create_params
<model_name>_params
wie article_params (dies ist die Standardkonvention in Rails zum Benennen Ihrer param-Methode)resource_params
(Eine generisch benannte Methode, die Sie in jedem Controller angeben können.)Darüber hinaus
load_and_authorize_resource
kann jetzt eineparam_method
Option zum Angeben einer benutzerdefinierten Methode im Controller verwendet werden, die ausgeführt werden soll, um die Eingabe zu bereinigen.Sie können die
param_method
Option einem Symbol zuordnen, das dem Namen einer Methode entspricht, die aufgerufen wird:Quelle: https://github.com/CanCanCommunity/cancancan#33-strong-parameters
quelle
Alternativ können Sie den Edelstein "Geschützte Attribute" verwenden. Dies macht jedoch den Zweck zunichte, starke Parameter zu benötigen. Wenn Sie jedoch eine ältere App aktualisieren, bietet Protected Attributes einen einfachen Weg zum Aktualisieren, bis Sie attr_accessible für starke Parameter umgestalten können.
quelle
Wenn Sie sich auf Rails 4 befinden und diese Fehlermeldung angezeigt wird, kann dies passieren, wenn Sie
enum
das Modell verwenden, wenn Sie folgende Symbole definiert haben:Das Formular wird beispielsweise einen Funkwähler als Zeichenfolgenparameter übergeben. Das ist in meinem Fall passiert. Die einfache Lösung besteht darin
enum
, anstelle von Symbolen zu Zeichenfolgen zu wechselnquelle