我有点问题。我想显示选择用户名作为选项。 这是我的控制器动作:
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上)。如何提高绩效?
答案 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之一中看到这个实例的一个例子:
<强>分页强>
或者,您也可以使用pagination创建表格。
RailsCasts解释得非常好: