2016-07-11 17 views
0

多くのアドレスを持つことができるユーザーモデルを持つアプリがあります。ネストされた属性を使用してサインアップするときに、ユーザーにアドレスを追加できるようにしたい。私はまた、ユーザーモデルにdeviseを使用しています。ネストされたアトリビュートフォームがデバイスビューに表示されない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

いいえ、私はそれをあきらめてデザインを違ったものにしましたが、私のカスタムコントローラが実際に使用されていないという別の面で作業していて、それでもdevise oneを使用していました。正しいコントローラーが使用されていることを二重に確認することをお勧めします。なぜなら、それは私の問題だったという気持ちがあるからです。 – 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 
関連する問題