Rails 4.0 avec Devise. Attributs imbriqués Paramètres non autorisés

Je suis en train de travailler sur une application web à l'aide de Concevoir et de Rails 4. J'ai un Utilisateur modèle que j'ai prolongé avec 2 des champs de formulaires supplémentaires de sorte que lorsqu'un utilisateur s'inscrit, il peut également inscrire son nom et prénom. (basé sur http://blog.12spokes.com/web-design-development/adding-custom-fields-to-your-devise-user-model-in-rails-4/). Je veux maintenant ajouter un Institution modèle. Ce modèle has_many :les utilisateurs, et un utilisateur belongs_to :institution. Je veux être en mesure d'enregistrer les nom de l'institution sur le même formulaire, je l'enregistrement de l'utilisateur. Je sais que j'ai besoin d'un nested_attribute dans mon Institution modèle, puisque c'est la mère, qui je le montrerai dans un instant. Lorsque je tente d'inscrire l'utilisateur j'obtiens dans la console: Unpermited paramètres: les Institutions.

Mon astuce, c'est que je ne peut pas mettre à jour ma classe parent(Institution), basé sur mon enfant de classe (de l'Utilisateur). Y aurait-il une solution à cela? Ou quelqu'un a vécu quelque chose de semblable?

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

inscriptions/nouveau.html.erb Ici, j'ai l'imbriqué

<%= 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 %>

Basé sur le tutoriel j'ai lié plus tôt, j'ai créé un nouveau Utilisateur::ParameterSanitizer qui hérite de la Concevoir::ParameterSanitizer et remplacé le sign_up méthode comme suit:

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

Enfin, mon 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

Merci pour la lecture!

Console params de sortie:

{"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"}

MODIFIER

Comme suggéré, j'ai ajouté

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 )*

MAIS, si je re-edit à

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

Je n'obtiens PAS d'erreur de syntaxe, mais je reçois Unpermited paramètres: les Établissements en la Demande.

Ma conviction est que cela se passe parce que l'Utilisateur est un enfant de l'Institution. J'ai, cependant, pas été en mesure de trouver un travail autour de cela.

source d'informationauteur Claudiu S