实际上这目前根本不起作用
@category = Category.find(params[:id])
@sub_categories = @category.sub_categories
if @sub_categories
@designs = []
@sub_categories.each do |sub_cat|
@designs << sub_cat.designs.paginate :page => params[:page], :order => 'name', :per_page => @per_page
end
end
它在语法错误
上失败了categories_controller.rb:21: syntax error, unexpected tSYMBEG, expecting kEND
...<< sub_cat.designs.paginate :page => params[:page], :order ...
基本上我有类别有很多sub_categories有很多设计和它在当前类别,我想显示该类别的所有设计...任何关于最佳实践的想法以及如何解决这个问题
答案 0 :(得分:2)
假设您打算使用@designs
而不是@patterns
:
@category = Category.find(params[:id])
@sub_categories = @category.sub_categories
pagination_options = { :page => params[:page],
:order => 'name',
:per_page => @per_page
}
unless @sub_categories.empty?
@designs = []
@sub_categories.each do |sub_cat|
@designs << sub_cat.designs.paginate(pagination_options)
end
end
我认为缺少的是paginate
电话参数的括号。
答案 1 :(得分:2)
我会做两件事来重构这个......
首先是通过将分页选项移动到设计模型上的类方法来减少耦合。您的控制器不应该对设计模型了解太多。
class Design < ActiveRecord::Base
def self.paginate_with_params(params, per_page)
paginate(:page => params[:page], :order => 'name', :per_page => per_page)
end
end
其次是从控制器中删除不必要的变量和逻辑,这些变量和逻辑并没有真正增加太多价值:
@category = Category.find(params[:id])
@designs = @category.sub_categories.map |sub_cat|
sub_cat.designs.paginate_with_params(params, @per_page)
end
我还没有测试过这段代码,所以如果它不起作用,请放轻松我。)
答案 2 :(得分:1)
a = []
b.each do |c|
a << c.d(e)
end
等于:
a = b.map { |c| c.d(e) }
如果d
不需要参数:
a = b.map &:d
但是在你的情况下,我想,你只需要在参数哈希周围添加()
,就像Ryan Bigg已经回答的那样。
答案 3 :(得分:1)
@category = Category.find(params[:id])
@sub_categories = @category.sub_categories # assumption: this doesn't return nil
page_opts = {:page => params[:page], :order => 'name', :per_page => @per_page}
@designs = @sub_categories.map {|sub_cat| sub_cat.designs.paginate(page_opts) }