[英]Rails 3 taking a long time to load the results
我的Rails應用程序必須通過缺少行的數據庫查詢並顯示匹配的結果。 我的代碼運行正常,但運行緩慢,顯示結果花費了很長時間。我使用的是ruby 1.9.3,rails 3.2.13和“ Webrick”服務器。我肯定有問題。 有什么辦法可以解決這個問題?我有兩個表分別稱為坐標和推文。
我的控制器代碼
require 'will_paginate/array'
class TweetsController<ApplicationController
def index
city = params[:show]
search_term = params[:text]
search_term.gsub!(/\s/, '%')
city_coordinates = Coordinates.where('city=?', city)
if (city_coordinates.count == 1 && city_coordinates.first.valid_location?)
@tweets = ((Tweets.for_coordinates(city_coordinates.first) & Tweets.where("tweet_text LIKE?" , "%#{search_term}%"))).paginate(page: params[:page], per_page:5)
elsif(city_coordinates.count!=1)
@tweets = ((Tweets.for_user_location(city) & Tweets.where("tweet_text LIKE?" , "%#{search_term}%"))).paginate(page: params[:page], per_page: 5)
else
Tweets.where("tweet_text LIKE? ", "%#{search_term}%").paginate(page: params[:page], per_page: 5)
end
end
end
我的模型代碼
class Tweets<ActiveRecord::Base
attr_accessible :id, :tweet_created_at, :tweet_id, :tweet_text, :tweet_source, :user_id, :user_name, :user_sc_name, :user_loc, :user_img, :longitude, :latitude, :place, :country
def self.for_coordinates(coordinates)
bbox = { min_lat: coordinates.latitude - 1.0, max_lat: coordinates.latitude + 1.0,
min_lng: coordinates.longitude - 1.0, max_lng: coordinates.longitude + 1.0
}
Tweets.where("(longitude BETWEEN ? and ?) AND (latitude BETWEEN ? and ?) OR (user_loc LIKE ?) " ,
bbox[:min_lng], bbox[:max_lng], bbox[:min_lat], bbox[:max_lat], "%#{coordinates.city}%" )
end
def self.for_user_location(city)
@tweets= Tweets.where("user_loc LIKE ?", "%#{city}%")
end
end
我的視圖代碼
<%= will_paginate @tweets %>
<% @tweets.each do |tweets| %>
<ul>
<li><%= tweets.id %></li>
<li><%= tweets.tweet_created_at %></li>
<li><%= tweets.tweet_source %></li>
<li><%= tweets.tweet_text %></li>
<li><%= tweets.user_id %></li>
<li><%= tweets.user_name %></li>
<li><%= tweets.user_sc_name %></li>
<li><%= tweets.user_loc %></li>
<li><%= tweets.user_img %></li>
<li><%= tweets.longitude %></li>
<li><%= tweets.latitude %></li>
<li><%= tweets.place %></li>
<li><%= tweets.country %></li>
<% end %>
</ul>
它有兩個搜索框,一個用於推文查詢,另一個用於城市,它必須顯示特定城市的推文。但是它非常慢。我無法找到原因是由於編碼效率低下或選擇錯誤導致的服務器或其他原因。它使用Mysql數據庫。
您的問題是兩個查詢的並集:
@tweets = (
(
Tweets.for_coordinates(city_coordinates.first) &
Tweets.where("tweet_text LIKE?" , "%#{search_term}%")
)
).paginate(page: params[:page], per_page:5)
這是什么:
您要執行的操作是:
您將需要更多這樣的東西:
@tweets = Tweets.for_coordinates(city_coordinates.first).
where('tweet_text like ?', "%#{search_term}%").
paginate(page:params[:page], per_page:5)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.