Rails,ActiveRecord多个查询导致一个实例变量

时间:2015-06-16 09:16:08

标签: ruby-on-rails arrays ruby activerecord will-paginate

我想要完成的任务(如果可能的话)是创建一个基本上进行2次搜索并将结果返回到一个实例变量的查询。这是因为,我使用的是will_paginate gem,它只允许我从单个查询中渲染一个对象数组,并且不接受任何其他要被推送到被发送到的数组的其他内容。模板。

我的events_controller.rb

#returns all events that match query
@events_search_result = Events.search(params[:event][:query])

#returns all events where column 'repeats' is nil
@events_not_repeat = Events.where.not(repeats: nil)
@events_not_repeat.each do |event|
  #'schedule.occurs_on?' methods coming from different gem. Not relative in the outcome of the array of objects to be rendered. 
  if event.schedule.occurs_on?(params)
    @events_search_result << event
  end
end

推送这两个对象数组可以得到所需的结果,但在尝试将@events_search_result渲染到模板时,我收到错误...

NoMethodError - undefined method 'total_pages' for #<Array:0x00000000>: 哪个来自will_paginate宝石。

理想情况下,我希望一次性发生这两个问题,我认为这将解决我的问题。我查看了ActiveRecord Query Interface,但由于我的经验不足,我对查询组合并不熟悉。

任何建议都会有所帮助。已经坚持这个问题很长一段时间了,并尝试了一堆解决方法。如果我的示例不够具有描述性,请提前道歉,但如果需要,我很乐意填写详细信息。谢谢!

3 个答案:

答案 0 :(得分:1)

由于您的两个对象具有相同的模型,因此您可以将一个对象添加到其他对象并应用分页。

例如:

NSString *venueID = @"my_lovely_venue_id";

if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"swarm://"]]) {
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[@"swarm://checkins/add?venueId=" stringByAppendingString:venueID]]];
}

答案 1 :(得分:0)

您需要在will_paginate初始值设定项文件中will_paginate/array来解决问题:

require 'will_paginate/array' 

答案 2 :(得分:0)

在发送到模板调用的实例变量上... @combined_events_of_both_queries.paginate(:page => params[:page], :per_page => 5)将其更改为要迭代的will_paginate数组。