0

会社でユーザーを作成するためのフォームが 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 の動的コレクション選択ですが、これは選択ボックスを処理していないようです。どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

1

site_idをパラメーターとしてURLAJAX 呼び出しに渡してから、その値を で読み取ることができますcontroller。このcontrollerメソッドではdepartments、その特定の のリストを取得して、レンダリングされているsiteに渡すこともできます。view

コードの関連部分を編集して、意味をよりよく説明しました。うまくいけば、これは理にかなっています:)

<%= f.collection_select :site_id, current_user.company.sites.all, :id, :name, {}, :onchange => "jQuery.get('/load_department?site=' + $('#user_site_id').val())",  :remote => true  %>

users_controller.rb:

def load_department
    site = params[:site]
    @departments = Site.find(site).departments

    respond_to do | format |  
        format.js {render :layout => false}  
    end
end

_department.html.erb:

    <% for department in @departments %>
        <%= check_box_tag "user[department_ids][]", department.id, current_user.department_ids.include?(department.id) %>
        <%= department.name %>
    <% end %>
于 2012-05-10T23:42:19.973 に答える