首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby on Rails搜索2模型

Ruby on Rails搜索2模型
EN

Stack Overflow用户
提问于 2013-02-27 22:21:32
回答 2查看 799关注 0票数 0

对的..。我花了3天的时间试着自己做这件事。

我有两个模型叫电影和放映。电影放映,电影has_many放映。

影片具有某些属性(:title、:date_of_release、:description、:genre)。

放映具有属性(:start_time、:date_being_screened、:film_id(电影的外键))。

我要做的是创建一个针对这两个模型的搜索。我想做这样的事情...

@films = Film.advanced_search(params:genre,params:title,params:start_time,params:date_showing)

然后在电影模型中。

代码语言:javascript
复制
def self.advanced_search(genre, title, start_time, date)
    search_string = "%" + title + "%"

    self.find(:all, :conditions => ["title LIKE ? OR genre = ? OR start_time LIKE ? OR date_showing = ?", title, genre, start_time, date], order: 'title')
    end
end 

我不认为这会像这样工作,但我希望我的解释足够详细,让任何人都能理解我试图做什么??:-/

谢谢你们的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-27 22:40:35

我会将搜索功能提取到一个单独的(非ActiveRecord)类中,比如AdvancedSearch,因为它既不适合Film也不适合Screening类。

而不是编写复杂的SQL查询,您可以只搜索电影,然后搜索放映,并组合结果,例如:

代码语言:javascript
复制
class AdvancedSearch
  def self.search
    film_matches = Film.advanced_search(...) # return an Array of Film objects
    screening_matches = Screening.advanced_search(...) # return an Array of Screening objects

    # combine the results
    results = film_matches + screening_matches.map(&:film)

    results.uniq # may be necessary to remove duplicates
  end
end

更新

假设您的高级搜索表单有两个字段--类型和位置。因此,当您提交表单时,发送的参数为:

代码语言:javascript
复制
{ :genre => 'Comedy', :location => 'London' }

然后,您的控制器将如下所示:

代码语言:javascript
复制
def advanced_search(params)
  film_matches = Film.advanced_search(:genre => params[:genre])
  screening_matches = Screening.advanced_search(:location => params[:location])

  # remaining code as above 
end

例如,您拆分参数,将每个参数发送到不同的模型运行搜索,然后组合结果。

这本质上是OR匹配-它将返回与类型匹配的电影或正在指定地点放映的电影。(如果你想要and和匹配,你需要计算数组的交集)。

票数 0
EN

Stack Overflow用户

发布于 2013-02-28 00:23:38

我想写点东西,但是这个演员说所有的http://railscasts.com/episodes/111-advanced-search-form

和你的差不多一样的案子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15114406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档