На самом деле единственное, что вы должны иметь в своем контроллере, это:
if params[:search]
@disks = Disks.custom_search(params[:search])
end
, а в вашей модели дисков что-то вроде
def custom_search term
find_by_field(term, :include => :host)
Все остальное должно быть во вспомогательных методах, к которымВы передаете переменную disk и возвращаете вычисленный результат для просмотра.Переменная экземпляра @search не обязательна, так как параметры доступны в методах view и helper.
Хорошо, из того, что вы мне сказали, этот первый пример должен быть в модели.Помните, что любое представление данных модели должно исходить из ваших моделей, даже вычисления данных, которые не хранятся в вашей базе данных.
Что-то вроде:
#view
- @disks.collect(&:host).each do |host|
- host.groups.each do |group|
= group.name
= group.disks_capacity
#your model group.rb
def disks_capacity
disks.map{|disk| disk.capacity}.sum # with disks.map we're talking about the disks which belong to this instance of group
end
Вспомогательный метод определяетсядобавление метода в xyz_helper.rb.
Если я могу честно предложить вам купить книгу и проработать ее.Я могу гарантировать, что вам понравится опыт обучения рельсам, что упростит вам задачу и сэкономит много времени в долгосрочной перспективе.