Есть ли лучший способ сделать это в рубине - PullRequest
3 голосов
/ 18 января 2011

На самом деле это в настоящее время не работает вообще

 @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 ...

В основном у меня есть категория, в которой есть много подкатегорий, в которой есть много дизайнов, и она находится в текущем состоянии.и я хочу показать все проекты для этой категории ... любая идея о лучших методах и как решить эту проблему

Ответы [ 4 ]

2 голосов
/ 18 января 2011

Я бы сделал две вещи, чтобы реорганизовать это ...

Во-первых, необходимо уменьшить сцепление, перенеся параметры разбивки на страницы в метод класса в проектной модели. Ваш контроллер не должен знать так много о проектной модели.

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 голосов
/ 18 января 2011

Предполагая, что вы хотели использовать @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 голос
/ 18 января 2011
@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) }
1 голос
/ 18 января 2011
a = []
b.each do |c|
    a << c.d(e)
end

равно:

a = b.map { |c| c.d(e) }

А если d не нужны параметры:

a = b.map &:d

Но в вашем случае, я полагаю, вам просто нужно добавить () вокруг хэша ваших параметров, как уже ответил Райан Бигг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...