1

私の解決策は機能しますが、オブジェクトを使用して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(",") );
4

0 に答える 0