选择有很多选项的标签

时间:2015-10-22 09:19:11

标签: ruby-on-rails ajax

我有点问题。我想显示选择用户名作为选项。 这是我的控制器动作:

def index
  @users = User.where.not(:id => current_user.id)
end

并查看:

<%= select_tag :user_id, options_for_select(@users.map { |u| [u.full_name, u.id] }) %>

问题是rails会非常缓慢地呈现此视图(特别是在许多用户的prod上)。如何提高绩效?

1 个答案:

答案 0 :(得分:1)

首先,我永远不明白为什么人们不使用collection_select

<%= collection_select :user, :id, @users, :id, :full_name %>

当你回复评论时,我正要提这个......

如果您有7000个用户,在选择标记中显示

除了必须滚动它们的明显问题之外,滚动区域的另一个UI问题实际上占据了整个屏幕。

选择框旨在提供一系列逻辑选择。我能想到的最多的是国家/州选择。

实时搜索

如果您想要展示这么多用户,您应该从user story开始。

这是您从用户的角度基本上解决问题的地方。正如Max建议的那样,live search功能可能更合适,或者至少是一个表:

#app/views/resources/_livesearch.html.erb
<%= text_field_tag :search, "Search", id: "user_search" %>

#config/routes.rb
resources :users do
   get :search, on: :collection
end

#app/assets/javascripts/application.js
$(document).on("change", "#user_search", function(){
   $.ajax({
      url: "users/search"
      data: { search: $(this).value() }
      success: function(data) {
         // show users
      }
   });
});

#app/controllers/users_controller.rb
class UsersController < ApplicationController
    def search
        @users = User.where("'name' LIKE ?", params[:search])
        render json: @users.to_json if request.xhr?
    end
end

你可以在我做了一段时间的demo apps之一中看到这个实例的一个例子:

enter image description here

<强>分页

或者,您也可以使用pagination创建表格。

RailsCasts解释得非常好:

enter image description here