2016-07-11 3 views
0

У меня есть приложение с моделью пользователя, которая может иметь много адресов. Я хочу иметь возможность добавлять адрес пользователю, когда он регистрируется через вложенные атрибуты. Я также использую программу для модели пользователя.Вложенные атрибуты не отображаются в представлениях Rails 4

Модели:

class Address < ActiveRecord::Base 
belongs_to :user 

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

has_many :addresses 

accepts_nested_attributes_for :addresses 

end 

Регистрация контроллер:

class Users::RegistrationsController < Devise::RegistrationsController 
before_action :set_user, only: [:show] 


def new 
    resource = build_resource({}) 
    resource.addresses.build 
    respond_with_navigational(resource){ render_with_scope :new } 
end 

def create 
    super 
end 



private 

def set_user 
@user = User.find(params[id]) 

end 

def user_params 
params.require(:user).permit(:email, :password, :first_name,     
:last_name, :phonenumber, :addresses_attributes => [:postcode, 
:housenumber, :streetname, :city, :town]) 

    end 
end 

поля для формы в целях регистрации:

<%= f.simple_fields_for :addresses do |address|%> 
    <%= address.input :housenumber %> 
    <%= address.input :postcode %> 
    <%= address.input :streetname%> 
    <%= address.input :town%> 
    <%= address.input :city%> 
    <%end%> 
+0

вы выяснить, как это сделать? Я застрял с той же проблемой – Mel

+0

Нет, я отказался от этого и сделал дизайн другим, хотя я понял, что при работе с другим аспектом, который мой пользовательский контроллер фактически не использовался, он все еще использовал его. Я бы предложил дважды проверить, что правильный контроллер используется, потому что я чувствую, что это проблема с моей. – ZSOR

ответ

0

Вам нужно добавить следующий метод к вашему ApplicationController:

class ApplicationController < ActionController::Base 
    # Your code 

    protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.permit(:sign_in) do |user_params| 
     user_params.permit(:email, :addresses_attributes => [:postcode, :housenumber, :streetname, :city, :town]) 
    end 
    end 
end 

Это позволяет разрешать вложенные атрибуты для модели разработки. Смотрите страницу репо и поиск «вложенный» для получения дополнительной информации:

https://github.com/plataformatec/devise

+0

Я попытался добавить это, и я прочитал репо, но не смог найти ничего похожего на работу. Любые другие идеи? – ZSOR

+0

Вы когда-нибудь получали эту работу? Я пытаюсь сделать то же самое в значительной степени ... – matthewalexander

0

Я знаю, что это немного старое, но это может спасти кого-то в будущем. После реализации configure_sign_up_params, вы должны использовать его в действии создать так что ваш Users::RegistrationsController должен выглядеть следующим образом:

class Users::RegistrationsController < Devise::RegistrationsController 
    before_action :set_user, only: [:show] 
    before_action :configure_sign_up_params, only: [:create] 

    # more code bellow... 
    protected 

     def configure_sign_up_params 
      devise_parameter_sanitizer.permit(
       :sign_up, 
       keys: [:email, :password, :password_confirmation, 
       # put any other keys in here     
      ]) 
     end 
end