визуализация: частичная с манипулированием: коллекция - PullRequest
0 голосов
/ 02 декабря 2009

Скажем, у меня есть коллекция @dogs, и я хочу отобразить часть коллекции в одном месте, а остальные - в другом. Легко их всех выплюнуть:

render :partial => 'dogs/summary', :collection => @dogs, :as => :dog

Но возможно ли управлять (уточнить) вашей коллекцией в потоке, или лучше применить эти определения в вашем контроллере и сделать что-то вроде:

%h2 Male Dogs:
render :partial => 'dogs/summary', :collection => @male_dogs, :as => :dog

%h2 Female Dogs:
render :partial => 'dogs/summary', :collection => @female_dogs, :as => :dog

Спасибо.

1 Ответ

4 голосов
/ 02 декабря 2009

Аргумент коллекции просто принимает список. Нет причин, по которым это не сработает:

render :partial => 'dogs/summary',  :as => :dog,
  :collection => @dogs.select{|dog| dog.gender == "M"}

Лично я предпочитаю создавать эти списки в контроллере. Я думаю, что выглядит лучше, и его можно сделать намного СУХОЕ с именованными областями.

IE:

Модель

class dog < ActiveRecord::Base
   named_scope :male, :conditions => {:gender => "M"}
   named_scope :female, :conditions => {:gender => "F"}
   ...
end

Контроллер

class DogsController < ApplicationController
  ...
  def index
    if params[:user_id]
      @user = User.find(params[:user_id])
      @male_dogs = @user.dogs.male
      @female_dogs = @user.dogs.female
    else
      @male_dogs = Dog.male
      @female_dogs = Dog.female
    end
  end
end

View

%h2 Male Dogs
= render :partial => 'dogs/summary',  :as => :dog,
  :collection => @male_dogs

%h2 Female Dogs
= render :partial => 'dogs/summary',  :as => :dog,
  :collection => @female_dogs
...