Rails显示来自options_from_collection_for_select的索引结果

时间:2013-06-13 14:48:26

标签: ruby-on-rails

我有一个Rails应用程序,其客户端有很多联系人。我想用选择的客户端修改联系人/索引列表。因此,用户选择客户端并刷新屏幕,显示该客户端的联系人。

我从这个下拉选择开始:

<%= select_tag 'Client', options_from_collection_for_select(Client.all, :id, :client_name) %>

但是,我不确定如何修改获取联系人的表格代码:

  <% @contacts.each do |contact| %>

我需要使用jquery吗?

感谢您的帮助!

UPDATE1:

我可以在语句中添加@selected_client

<%= select_tag 'Client', options_from_collection_for_select(Client.order(:client_name), :id, :client_name, @selected_client) %>

然后使用:

  <% @selected_client.contacts.each do |contact| %>

1 个答案:

答案 0 :(得分:0)

以下是我如何做到这一点,请注意,由于我刚刚在这里打字,所以没有经过测试,但它应该为你提供一个好的起点。如果您需要更多帮助,请回复您的代码。

<%= select_tag 'client', options_from_collection_for_select(Client.all, :id, :client_name) %>
<%= select_tag "client_contacts" %>

然后你需要一些js用于ajax:

$(document).ready(function() {
  $("#client").on("change", function() {
    var the_id = $(this).val();
    $.getJSON("/client/contacts", {id: the_id},       
      function(data){
          var options = '';
          for (var i = 0; i < data.length; i++){
              options += '<option value="' + data[i].id + '">' + data[i].name + '</option>';
          }
          $("#client_contacts").html(options);      
      });
  });
});

然后您需要一条客户/联系人路线:

get 'client/contacts/:id', to: 'client/contacts'

控制器示例:

def contacts
  @client = Client.find(params[:id])
  respond_to do |format|
    format.json { render: json: {@client.contacts.to_json}}
  end  
end