Я работаю над веб-приложением с помощью Devise и Rails 4. У меня есть модель User, которую я расширил с помощью двух дополнительных полей формы, которые, когда пользователь подписывается, могут также представить свои фамилии/имена. (на основе http://blog.12spokes.com/web-design-development/adding-custom-fields-to-your-devise-user-model-in-rails-4/). Теперь я хочу добавить модель Institution. Эта модель has_many: пользователи и пользователь принадлежит к: учреждению. Я хочу, чтобы иметь возможность зарегистрировать название учреждения в той же форме, я зарегистрирую пользователя. Я знаю, что мне нужна вложенная переменная в моей модели Institution, так как это родительский элемент, который я покажу немного. Когда я пытаюсь зарегистрировать пользователя, я попадаю в консоль: Unpermited parameters: Institutions.
Мой намек заключается в том, что я не могу обновить родительский класс (Institution) на основе моего дочернего класса (User). Может ли быть решение этого? Или кто-нибудь испытал что-то подобное?
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
registrations/new.html.erb Здесь у меня есть вложенная форма
<%= 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 %>
Основываясь на учебнике, который я связал ранее, я создал новый User :: ParameterSanitizer, который наследуется от Devise :: ParameterSanitizer и переопределяет метод sign_up
следующим образом:
Библиотека /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
Наконец, мой 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
Спасибо за чтение!
Выход параметров консоли:
{"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"}
РЕДАКТИРОВАТЬ
Как было предложено, я добавил
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 )*
НО, если я перередактирую
params.require(resource_name).permit( :email, :first_name, :last_name, :password, :password_confirmation, institution: [:name] )
Я получаю NO синтаксическую ошибку, но я получаю параметры Unpermited: Учреждения в запросе.
Я убежден, что это происходит потому, что Пользователь является дочерней организацией. Однако мне не удалось найти работу.