对不起,如果这似乎愚蠢(最近没有太多的睡眠),但我试图找出在控制器之间共享控制器(和方法)功能的最佳方式,而无需为每个控制器编写相同的代码。Rails共享控制器功能和菜单
比方说,我有不同的控制器与search
相同的方法。在此方法中我有不同的控制器中的相同期限的情况下,如:
case term
when "beginning_parens"
@books = Book.where("title REGEXP ? AND localeLanguage LIKE ?", '^\\([0-9]*\\)', params[:language]).not_locked.reorder(order).paginate(:page => params[:page])
when 'search_all_caps'
@books = Book.detect_uppercase.not_locked.reorder(order).where("localeLanguage LIKE ?", params[:language]).paginate(:page => params[:page])
现在我不希望有写所有的,对于每一个控制器。我希望不必通过params[:language]
,paginate
等每个案件,因为我希望每个人都可以通过语言和分页搜索。
或课程,实例变量将控制器间的改变,而不是@books
我们将有@dvds
,@games
等
我也发现自己不得不通过菜单中的所有链接的params
:
= link_to 'with all CAPS', books_search_path(:term => 'search_all_caps', :language => params[:language])
我相信必须有更好的方法来做到这一点。
我已经在模型的顶部用extend ModelFunctions
的每个模型顶部调用了一个文件,我已经为这些模型分享了常用方法。该文件包含以上使用的方法,如detect_uppercase
,并且对于许多控制器很常见。所以至少我有那部分工作:)
任何帮助,将不胜感激。
谢谢。不会把所有这些放到application_controller.rb中有相同的效果吗? – kakubei 2012-07-16 11:27:35
与appliction_controller.rb一起尝试了它,我得到了以下错误:ApplicationController中的未初始化的类变量@@ model – kakubei 2012-07-16 13:33:50
如果BooksController继承自ApplicationController(或BaseController),那么它如何设置父级使用的变量? – kakubei 2012-07-16 13:45:25