私の解決策は機能しますが、オブジェクトを使用してjquery値を比較し、コンマ区切りの文字列を使用する必要がない方法はありますか?
この機能は、役割に既に割り当てられている権限を表示することです。ID と名前を持つロール テーブル、ID と名前を持つ権限テーブル、および role_id と permission_id を持つ roles_permissions テーブルがあります。役割を選択するときに、その役割に既に割り当てられているアクセス許可を照会し、複数選択リスト ボックスでそれらを選択したいと考えています。
これが私のモデル、role.rbとpermission.rbです:
class Role < ActiveRecord::Base
has_and_belongs_to_many :permissions, :join_table => "roles_permissions"
attr_accessible :description, :name
end
class Permission < ActiveRecord::Base
has_and_belongs_to_many :roles, :join_table => "roles_permissions"
attr_accessible :description, :name
end
私のコントローラー、roles_permissions_controller.rb:
class RolesPermissionsController < ApplicationController
def index
# get all roles
@roles = Role.all
# get all permissions
@all_permissions = Permission.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @roles }
end
end
def update_permissions
# updates the permissions based on the role selected
role = Role.find(params[:role_id])
puts ' list of perms by role:' << role.name << ' id:' << params[:role_id]
# check for nil, create comma seperated string of id's
if role.permissions.first == nil
@permissions = ""
else
@permissions = role.permissions.map{|a| a.id}.join(',').to_s
end
end
end
ここに私のroutes.rbがあります:
Stats::Application.routes.draw do
resources :permissions
resources :roles
match "/roles_permissions/" => "roles_permissions#index"
get 'roles_permissions/update_permissions', :as => 'update_permissions'
end
私の見解、roles_permissions/index.html.erb:
<%= collection_select(:role, :id, @roles, :id, :name, options ={:prompt => "-Select a role"}) %>
<br/>
<%= collection_select(:permission, :id, @all_permissions, :id, :name, options ={},html_options ={ :multiple => true, :size => 10}) %>
<br/>
<script>
$(document).ready(
function()
{
$('#role_id').change(
function()
{
$.ajax({
url: "<%= update_permissions_path %>",
data:
{
role_id : $(this).val()
},
dataType: "script"
});
}
);
}
);
</script>
そして最後に、私の js ファイル update_permissions.js.erb:
var permissions = "<%= @permissions%>";
$('#permission_id').val( permissions.split(",") );