1

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

我从这个下拉选择开始:

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

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

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

我需要使用jquery吗?

谢谢您的帮助!

更新1:

我可以@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| %>
4

1 回答 1

0

这是我的做法,请注意,这没有经过测试,因为我只是在这里输入了它,但它应该给你一个很好的起点。如果您需要更多帮助,请在此处回复您的代码。

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

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

$(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
于 2013-06-13T18:59:30.717 回答