会社でユーザーを作成するためのフォームが 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 %>
解決策を見つけようと何日もグーグルで検索しましたが、必要なものを正確に見つけることができません。私が見つけた最も近いものは、grouped_collection_select メソッド (プロジェクトの別の部分で使用したもの) を使用して改訂された Ryan Bate の動的コレクション選択ですが、これは選択ボックスを処理していないようです。どんな助けでも大歓迎です。ありがとう。