0

会社のユーザを作成するためのフォームがrails 3.2にあります。各社にはサイトがあります。サイトはcollection_selectを介してユーザーに割り当てられ、各サイトにはチェックボックスを使用して選択されたいくつかの部門があります。ユーザーはサイトに属し、そのサイトの多くの部門に所属することができます。rails 3.2フォームのcollection_selectの値に応じて、チェックボックスのオプションを変更できない

サイトcollection_selectで選択した値に応じて変更するには、部門チェックボックスのオプションが必要です。

私は、collection_selectのonchangeを使用して、部門を含む部分を呼び出すようにしています。私はこれを稼働させることができましたが、会社のすべての部門のみを表示していました。個々のサイトごとの部門ではありません。私は選択されたサイトをパーシャルに渡す方法を理解していないので、正しい部門を返すことができます(これが可能であれば)。これまで

私のコードは次のとおりです。

フォーム:

<%= form_for @user, :url => front_admin_users_path do |f| %> 
     <%= devise_error_messages! %> 

     <div><%= f.label :email %><br /> 
     <%= f.email_field :email %></div> 

     <%= f.collection_select :role, User::ROLES, :to_s, :humanize %> 

     <%= f.collection_select :site_id, current_user.company.sites.all, :id, :name, {}, :onchange => "jQuery.get('/load_department')", :remote => true %> 

     <div id="department_frame"></div> 

     <div><%= f.label :password %><br /> 
     <%= f.password_field :password %></div> 

     <div><%= f.label :password_confirmation %><br /> 
     <%= f.password_field :password_confirmation %></div> 

     <div><%= f.submit "Sign up" %></div> 
    <% end %> 

users_controller.rb:

 def load_department 
     respond_to do | format | 
     format.js {render :layout => false} 
     end 
    end 

load_department.js.erb:

$("#department_frame").html("<%=j render(:partial =>"department") %>"); 

_department.html .erb:

<% current_user.company.sites.each do |site| %> 
<% for department in site.departments %> 
    <%= check_box_tag "user[department_ids][]", department.id, current_user.department_ids.include?(department.id) %> 
    <%= department.name %> 
<% end %> 

は、私は解決策を見つけようとし日間グーグルましたが、まさに私が必要なものを見つけることができません。私が見つけた最も近いものは、Ryan Bateの動的コレクションです。これはgrouped_collection_selectメソッド(これは私がプロジェクトの別の部分で使ったメソッド)を使って改訂されましたが、これは選択ボックスを扱うようには見えません。どんな助けもありがとう。ありがとう。

答えて

1

URLのパラメータとしてsite_idをAJAXコールに渡してから、controllerの値を読み取ることができます。 controllerメソッドでは、その特定のsitedepartmentsのリストを取得して、それをレンダリングされているviewに渡すこともできます。

私はコードの関連部分を編集して、より良い意味を説明しました。うまくいけば、これは理にかなって:)

フォーム

<%= f.collection_select :site_id, current_user.company.sites.all, :id, :name, {}, :onchange => "jQuery.get('/load_department?site=' + $('#user_site_id').val())", :remote => true %> 

users_controller.rb:

def load_department 
    site = params[:site] 
    @departments = Site.find(site).departments 

    respond_to do | format | 
     format.js {render :layout => false} 
    end 
end 

_department.html.erb:

<% for department in @departments %> 
     <%= check_box_tag "user[department_ids][]", department.id, current_user.department_ids.include?(department.id) %> 
     <%= department.name %> 
    <% end %> 
関連する問題