抱歉,如果这看起来很愚蠢(最近睡眠不多),但我正在尝试找出在控制器之间共享控制器(和方法)功能的最佳方法,而无需为每个控制器编写相同的代码。
假设我有各种具有相同方法的控制器,称为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
上面使用的方法,并且在许多控制器中都很常见。所以至少我有那部分工作:)
任何帮助,将不胜感激。