我在 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 方法(我在项目的另一部分中使用过)进行了修改,但这似乎不适用于选择框。任何帮助,将不胜感激。谢谢。