2013-05-12 55 views
0

如果我的模型具有以下字段:创建模型上第二视图和控制器

class Book < ActiveRecord::Base 
    attr_accessible :author, :title, :year, :month 
    scope :recent, order('year desc, month desc').limit(3) 
end 

,如果我还希望通过一年来查看这个数据,是能够更好地创造今年新的控制器和视图?或者我应该使用路线吗?

回答

1

我会建议通过多种途径也这样做,但尽管是,你不需要多个控制器或视图正如你提出你的担心一样。
可以在routes.rb做到这一点,通过创建Book集合路线为:

resources :books do 
    get '/by/:timeline', to: 'books#timeline', as: 'timeline', on: :collection 
end 

这将为您提供一个GET timeline_books_path,它可以在BooksControllertimeline方法来配置。

呼叫像timeline_books_path('months')将提供的URI:/books/by/monthsparams[:timeline]将等于“月”为您效劳的timeline方法。
类似的情况是timeline_books_path('year') =>/books/by/year

希望它有帮助。 :)

+0

我使用时间线作为变量而不是您建议的字符串,所以您可以/书籍/ by/2012或/ books/by/2012等。 – 2013-05-12 16:08:41

+0

这是一个不错的方法。给你更多的灵活性;但是你的控制器逻辑刚刚变得更多。 :) – kiddorails 2013-05-12 16:17:14

0

不,你应该重用当前视图和控制器。最简单的方法是将一个参数添加到index行动:

class BooksController < ApplicationController 
    def index 
    if params[:year] 
     @books = Book.where(:year => params[:year]) 
    else 
     @books = Book.scoped 
    end 
    end 
end 

而且,它可能是这个过滤器移动到Book模型是一个好主意。如果您发现自己为此操作添加了大量过滤器,则可以将过滤逻辑重构为另一个类。

相关问题