好吧,我有以下設置並需要一些指導。我已經浪費了在這個問題上幾乎2天,我需要繼續前進:如何使用has_many創建複選框網格:通過關聯
所以,角色和權限通過RolePermissions相關 角色 - > RolePermission - >權限
我希望創造一個複選框網格允許我同時編輯所有角色和權限。
這就是即時尋找視覺:
任何幫助將不勝感激!另外,我正在使用simple_form和bootstrap。
好吧,我有以下設置並需要一些指導。我已經浪費了在這個問題上幾乎2天,我需要繼續前進:如何使用has_many創建複選框網格:通過關聯
所以,角色和權限通過RolePermissions相關 角色 - > RolePermission - >權限
我希望創造一個複選框網格允許我同時編輯所有角色和權限。
這就是即時尋找視覺:
任何幫助將不勝感激!另外,我正在使用simple_form和bootstrap。
試試這個,
# /config/routes.rb
resources :roles do
collection do
get :edit_multiple
put :update_multiple
end
end
# /app/controllers/roles_controller.rb
class RolesController < ApplicationController
def edit_multiple
@roles = Role.all
@permissions = Permission.all
end
def update_multiple
params[:roles] = {} unless params.has_key?(:roles) # if all checkboxes unchecked.
Role.all.each do |role|
# this allows for 0 permission checkboxes being checked for a role.
unless params[:roles].has_key?(role.id.to_s)
params[:roles][role.id] = { permission_ids: [] }
end
end
@roles = Role.update(params[:roles].keys, params[:roles].values)
@roles.reject! { |r| r.errors.empty? }
if @roles.empty?
redirect_to edit_multiple_roles_path
else
render :edit_multiple
end
end
end
# /app/views/roles/edit_multiple.html.erb
<%= form_tag update_multiple_roles_path, method: :put do %>
<table>
<tr>
<th></th>
<% @permissions.each do |permission| %>
<th><%= permission.name %></th>
<% end %>
</tr>
<% @roles.each do |role| %>
<tr>
<th><%= role.name %></th>
<% @permissions.each do |permission| %>
<td><%= check_box_tag "roles[#{role.id}][permission_ids][]", permission.id, role.permissions.include?(permission) %></td>
<% end %>
</tr>
<% end %>
</table>
<%= submit_tag "Save" %>
<% end %>
# /app/models/role.rb
class Role < ActiveRecord::Base
has_many :role_permissions
has_many :permissions, through: :role_permissions
attr_accessible :name, :permission_ids
end
這是http://railscasts.com/episodes/17-habtm-checkboxes和http://railscasts.com/episodes/165-edit-multiple-revised
編輯的組合:
只注意到我的表格標題倒退。這將使在頂部的角色和權限下側,
# /app/views/roles/edit_multiple.html.erb
<%= form_tag update_multiple_roles_path, method: :put do %>
<table>
<tr>
<th></th>
<% @roles.each do |role| %>
<th><%= role.name %></th>
<% end %>
</tr>
<% @permissions.each do |permission| %>
<tr>
<th><%= permission.name %></th>
<% @roles.each do |role| %>
<td><%= check_box_tag "roles[#{role.id}][permission_ids][]", permission.id, role.permissions.include?(permission) %></td>
<% end %>
</tr>
<% end %>
</table>
<%= submit_tag "Save" %>
<% end %>
我想出了另一種解決方案,但這是更好/優雅 – 2013-03-11 18:54:02
是的,我已經注意到實施標題時,自己改變它....我的解決方案是非常類似於這個和這極大地幫助了我。謝謝! – 2013-03-11 19:03:15
我碰到一個輕微的問題。當所有複選框未被選中時,表單將沿帖子發送任何東西。這意味着沒有params [:roles]存在,因此我得到「未定義方法has_key?」爲nil:NilClass「,因爲params [:rails]不存在。我已經檢查了params [:rails]是否存在,並試圖手動構建它,但我非常喜歡軌道,我失敗了。有什麼建議麼? – 2013-03-11 20:35:44
爲答案添加爲從OP要求:
有上覆選框的habtm一個railscast您可以適應它您的需求:railscasts.com/episodes/17-habtm-checkboxes
這個railscast絕對給了我正確的方向邁出的第一步......在山姆的迴應之前肯定會被標記爲答案。還是一個非常好的鏈接,看看你是否在我的情況! – 2013-03-12 13:54:57
沒有與複選框的habtm一個railscast您可以修改它以適應您的需求: http://railscasts.com/episodes/17-habtm-checkboxes – DickieBoy 2013-03-11 18:01:54
能否請您把這個評論到一個答案,因爲使用該railscast我能夠創建一些東西和id喜歡給你poi的功勞在正確的方向nting我:) – 2013-03-11 18:21:29