Rails 4.0 mit Entwickeln. Verschachtelte Attribute Unpermited Parameter

Arbeite ich an einer web-app mit Entwickeln und Rails 4. Ich habe eine Benutzer Modell, das ich verlängert mit 2 extra-Formular-Felder, so dass, wenn ein Benutzer sich anmeldet, er kann uns auch seinen ersten/letzten Namen. (basierend auf http://blog.12spokes.com/web-design-development/adding-custom-fields-to-your-devise-user-model-in-rails-4/). Ich will nun hinzufügen Institution Modell. Dieses Modell has_many :Benutzer und ein Benutzer belongs_to :institution. Ich möchte in der Lage sein zu registrieren, die institution name auf der gleichen form, die ich die Anmeldung. Ich weiß, ich muss ein nested_attribute in meinem Institution Modell, da dies die Eltern, die zeige ich in einem bit. Wenn ich versuche zu unterzeichnen, bis der Benutzer bekomme ich in der Konsole: Unpermited Parameter: Institutionen.

Mein Tipp ist, dass ich nicht aktualisieren kann, meine übergeordneten Klasse(Institution), basierend auf mein Kind Klasse (User). Vielleicht gibt es eine Lösung für dieses? Oder hat jemand ähnliches erlebt?

class Institutions < ActiveRecord::Base
    has_many :users, 
    accepts_nested_attributes_for :users
end

class User < ActiveRecord::Base
     devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable
     belongs_to :institution
end

Anmeldungen/neue.html-Code.erb Hier habe ich die geschachtelte form

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f|     %>
<%= devise_error_messages! %>
.
. 
    <%= f.fields_for :institutions do |i| %>
        <p><%= i.label :name %><br />
        <%= i.text_field :institutions_attr %></p>
    <% end %>

Basiert auf der tutorial-ich gelinkt habe früher, habe ich eine neue User::ParameterSanitizer die erbt von der Entwickeln::ParameterSanitizer und überschreiben die sign_up - Methode wie folgt:

lib/user_sanitizer.rb

private
def sign_up
    default_params.permit(:first_name, :last_name ,:email, :password,  :password_confirmation, :current_password, institutions_attributes: [:id, :name])
end

Schließlich, meine application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  protected
  def devise_parameter_sanitizer
    if resource_class == User
    User::ParameterSanitizer.new(User, :user, params)
    else 
    super
    end
  end
end

Danke für das Lesen!

Konsole params Ausgabe:

{"utf8"=>"✓",
 "authenticity_token"=>"JKuN6K5l0iwFsj/25B7GKDj7WEHR4DO3oaVyGxGJKvU=",
 "user"=>{"email"=>"[email protected]",
 "first_name"=>"abc",
 "last_name"=>"xyz",
 "institutions"=>{"name"=>"Government"},
 "password"=>"[FILTERED]",
 "password_confirmation"=>"[FILTERED]"},
 "commit"=>"Sign up"}

BEARBEITEN

Wie vorgeschlagen, habe ich Hinzugefügt,

params.require(resource_name).permit( :email, :first_name, :last_name, institution:  [:name], :password, :password_confirmation ) and I get an *error syntax error, unexpected ',', expecting => ...nstitution: [:name], :password, :password_confirmation )*

ABER, wenn ich Sie wieder Bearbeiten zu

params.require(resource_name).permit( :email, :first_name, :last_name, :password, :password_confirmation, institution:  [:name] ) 

Ich bekomme KEINE syntax-Fehler, aber ich bekomme Unpermited Parameter: Institutionen in der Anfrage.

Meine überzeugung ist, dass dies geschieht, weil Benutzer ist ein Kind der Einrichtung. Ich haben, jedoch nicht in der Lage war, eine Arbeit zu finden, um dieses.

InformationsquelleAutor der Frage Claudiu S | 2013-07-20

Schreibe einen Kommentar