2016-04-23 11 views
0

私は登録のために考案し使用していますし、フォームネストされたフォームは

ユーザモデル

class User < ActiveRecord::Base 
    has_many :languages_users 
    has_many :languages, :through => :languages_users 
    accepts_nested_attributes_for :languages_users 
end 

registrations_controllerに表示されていない巣にサインアップしてのみ、そのセクションのためのフォームをしようとしています表示されません.RB

class Users::RegistrationsController < Devise::RegistrationsController 

before_filter :configure_sign_up_params, only: [:create] 
def new 
    build_resource({}) 
    resource.languages_users.build 
    respond_with self.resource 
end 

def create 
super 
end 
protected 

    def configure_permitted_parameters 

    devise_parameter_sanitizer.for(:sign_up) { |u| 
     u.permit(:email, :password, :password_confirmation, :bio, :location, :last_name, :first_name, :nationality, :avatar, languages_users_attributes: [:language_id, :level]) } 
    end 
end 

sign_up形態の要部

<%= form_for(resource, as: resource_name, url: "users/registration_path(resource_name)") do |f| %> 
<%= f.fields_for :languages_users do |lu| %> 
    <br> 
     <div class="fields"> 
     <%= lu.collection_select(:language_id, Language.order('language ASC').all, :id, :language) %><br> 
     <%= lu.hidden_field :level, value: 1 %> 
     </div> 
    <% end %> 
<% end %> 

関連するルート

Rails.application.routes.draw do 
    resources :languages 
    resources :languages_users 
    devise_for :users 
end 

任意の洞察力をいただければ幸いです!

答えて

0

はあなたがいないなら確実で、そのまま動作するはずです:

  • は、SQLクエリをトリガするでしょうregistration#newコントローラのアクションメソッドと
  • はどこかresource.languagesを呼び出すビュー、間あなたのresourceインスタンスをリロードあなたのテーブル名のパターンlanguages_usersが中を定義するために専念しているので、あなたの仲介language_users関係とも混同されることがあり、それ

レールをフラッシュhas_and_belongs_to_many関係内termediaryテーブル、お使いのモデルの名前を変更するか、それがより良いあなたのニーズ

+0

こんにちは、あなたが登録#新しいコントローラとビューの間でリソースを再ロードすることによって何を意味し合う場合は、この最後の関係タイプを使用しようか?私は上に置いたものを除いて究極的に何も変えていない - 私は別のステップを逃している?また、languages_usersは言語とユーザー・モデルの間の結合表であり、したがって名前です。 – gwalshington

+0

1)あなたのレイアウトビューテンプレートではおそらく 2)あなたのlanguage_userモデルにロジックがない場合、このモデルにもっとたくさんのものを入れるつもりなら、ユーザーと言語の間にhas_and_belong_to_many関係を使用することができます言語の流暢なレベル)私はそれを名前を変更します。 – nicolas

+0

私は上のビューを置くので、私はそうは思わない。 – gwalshington

-1
<%= form_for(resource, as: resource_name, url: "users/registration_path(resource_name)") do |f| %> 
<% resource.languages_users.each do |languages_user| %> 
    <%= f.fields_for languages_user do |lu| %> 
    <br> 
     <div class="fields"> 
     <%= lu.collection_select(:language_id, Language.order('language ASC').all, :id, :language) %><br> 
     <%= lu.hidden_field :level, value: 1 %> 
     </div> 
    <% end %> 
    <% end %> 
<% end %> 
+0

この更新を行うと 'Unpermitted parameter:languages_user'が表示されます。また、送信時に申し込みフォームにエラーがあると、入れ子になったフォームが消えてしまう – gwalshington

関連する問題