Создание профиля для разработчиков

Итак, я сделал шаги, описанные в Модель профиля для пользователей Devise? Я использую рельсы 4 и ruby ​​1.9.3p448

class User < ActiveRecord::Base

devise :database_authenticatable, :registerable,
       :recoverable, :rememberable, :trackable, :validatable 

attr_accessible :email, :password, :password_confirmation, :remember_me, :profile_attributes
has_one :profile
accepts_nested_attributes_for :profile       


protected

def profile
  super || build_profile
end 

end
#
class Profile < ActiveRecord::Base  
    belongs_to :user
    attr_accessible :uname, :manager
end
#
<h2>Sign up...</h2>
<%= form_for resource, :as => resource_name, :url => registration_path(resource_name) do |f| %>

<%= devise_error_messages! %>

<div><%= f.label :email %><br />
<%= f.email_field :email, :autofocus => true %></div>
<div><%= f.label :password %><br />
<%= f.password_field :password %></div>
<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>  

<%= f.fields_for :profile do |profile_form| %>
  <h2><%= profile_form.label :uname %></h2>
  <p><%= profile_form.text_field :uname %></p>  
  <h2><%= profile_form.label :manager %></h2>
  <p><%= profile_form.text_field :manager %></p>
<% end %>  

<div><%= f.submit "Sign up" %></div>
<% end %>
<%= render "devise/shared/links" %>
#

Невозможно сохранить профиль для пользователя, и это результат:

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"kG7S9lF4+5hm+ggmKA4LZyXrN4hsPf01jGQvKxgzGGI=", "user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "profile_attributes"=>{"uname"=>"1", "manager"=>"1"}}, "commit"=>"Sign up"} **Unpermitted parameters: profile_attributes**

Shoud Я делаю что-нибудь в контроллере Profiles? Спасибо заранее

Ответ 1

Я нашел решение! В моих users/registrations_controller.rb мне пришлось добавить следующие

 before_filter :configure_permitted_parameters, if: :devise_controller?

def configure_permitted_parameters
   devise_parameter_sanitizer.for(:sign_up) {|u| 
     u.permit(:email, :password, :password_confirmation, :remember_me, 
     profile_attributes: [:uname, :manager])}
end

и он отлично работает!

Ответ 2

Rails 4 прекратил использование attr_accessible и начал использовать сильные параметры - http://api.rubyonrails.org/classes/ActionController/StrongParameters.html

Вам нужно добавить свои вложенные атрибуты для профиля в разрешенные атрибуты в пользовательском контроллере.

Ответ 3

Генерировать нормальный элемент Users_controller включает в себя show, edit, index и даже create и new действия, если вы хотите!, и использовать это в файле маршрутов

 devise_for :users, :controllers => { :registrations => "users" }
  resources :users, only: [:index, :new, :create, :show, :destroy, :edit, :update] 

как вы видите, это переопределит регистрационный контроллер разработки и позволит вам использовать свой собственный пользовательский контроллер, и вы можете создать свою собственную регистрационную форму и изменить форму, если вам не нравится использовать то, что сделано при разработке. и не забывайте разрушать модель профиля, потому что вам это не понадобится, если вы последуете моему ответу.