在视图中,声明一个不链接到任何对象的表单
<% form_tag :url => search_book_path, :method => :get do %>
<%= text_field_tag :start_time %>
<%= text_field_tag :end_time %>
<%= submit_tag %>
<% end %>
在书籍上添加路线
map.resource :books, :collection => { search => :get }
在 book_controller 中,声明函数 search:
def search
start_time = params[:start_time] || DateTime.now
end_time = params[:end_time] || DateTime.now
@books = Book.search(start_time, end_time)
end
然后在 Book 模型上声明搜索
def search(start_time_, end_time_)
return Book.find(:all, :conditions => [
"#{Book.table_name}.start_time >= ? AND #{book.table_name}.end_time <= ?",
start_time_,
end_time_]
)
end
不确定所有的语法,但这应该给你一个想法。
编辑:我不明白所有的问题。模型功能search
应该搜索可用的房屋:
- 未在要求的开始日期使用:book.end_time < start_time_
- 未在规定的结束日期预订:book.start_time > end_time_
像这样
def search_for_availability_between(start_time_, end_time_)
return Book.find(:all, :conditions => [
"#{Book.table_name}.start_time > ? AND #{book.table_name}.end_time < ?",
end_time_,
start_time_]
)
end
你应该通过测试来检查它,但我认为它应该可以工作。