如果我的模型有以下字段:
class Book < ActiveRecord::Base
attr_accessible :author, :title, :year, :month
scope :recent, order('year desc, month desc').limit(3)
end
如果我也希望按年查看这些数据,那么创建一个新的控制器并查看年份会更好吗?或者我应该使用路线吗?
答案 0 :(得分:1)
我建议你也可以通过路线来做这件事,但尽管如此,你不需要在你担心的情况下提出多个控制器或视图。
您可以通过在Book
中为routes.rb
创建收集路由作为:
resources :books do
get '/by/:timeline', to: 'books#timeline', as: 'timeline', on: :collection
end
这将为您提供GET timeline_books_path
,可以使用BooksController
的{{1}}方法进行配置。
timeline
之类的通话将提供URI:timeline_books_path('months')
和/books/by/months
将等于'月',以便您params[:timeline]
方式处理。
类似于timeline
=&gt;的情况。 timeline_books_path('year')
。
希望它有所帮助。 :)
答案 1 :(得分:0)
我认为通过路由或查询字符串会更好,而不是几个动作。只需根据不同的路线或参数发送一个动作的响应。
SO做同样的事情(通过路线):
答案 2 :(得分:0)
不,您应该重用当前视图和控制器。最简单的方法是在index
操作中添加参数:
class BooksController < ApplicationController
def index
if params[:year]
@books = Book.where(:year => params[:year])
else
@books = Book.scoped
end
end
end
此外,将此过滤器移至Book
模型可能是个好主意。如果您发现自己在此操作中添加了大量过滤器,则可以将过滤逻辑重构为另一个类。