0

在我的 Rails 应用程序中,我需要使用 will_paginate 显示大量输出。但是由于控制器代码调用了模型中定义的定义,因此我不能使用分页,因为获取查询的条件是在我的模型中定义的。我的模型文件

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          

我的控制器代码

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}%")  
    elsif (city_coordinates.count != 1 )
      @tweets = Tweets.for_user_location(city) &  Tweets.where("tweet_text LIKE?" , "%#{search_term}%")  
    else
      Tweets.where("tweet_text LIKE? ", "%#{search_term}%").paginate(page: params[:page], per_page: 50)
    end
  end
end

由于控制器正在调用模型中定义的定义,因此我坚持使用 will_paginate 来使用分页。请问有什么帮助吗?

4

2 回答 2

1

在结果上调用分页,而不是在Model

(Tweets.for_coordinates(city_coordinates.first) & Tweets.where("tweet_text LIKE?" , "%#{search_term}%")).paginate(page: params[:page], per_page: 50)

你将不得不打电话require 'will_paginate/array'

于 2013-08-21T10:43:02.317 回答
0

试试这个

控制器:

Tweets.where("tweet_text LIKE? ","%#{search_term}%").page(params[:page]).per(50)

看法

<%= paginate @tweets %>
于 2013-08-21T08:36:47.777 回答