Domanda

Dire che ho una collezione di @dogs, e voglio rendere parte della collezione in un unico luogo e il resto in un altro. E 'facile sputare tutti insieme:

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

Ma è possibile manipolare (perfezionare) la vostra collezione in linea, o è meglio la pratica di rendere tali definizioni di cui il controllore e fare qualcosa di simile:

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

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

Grazie.

È stato utile?

Soluzione

L'argomento collezione prende solo un elenco. Non c'è alcun motivo per cui questo non avrebbe funzionato:

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

Personalmente preferisco la creazione di tali elenchi nel controller. Penso che un aspetto migliore, e può essere fatto molto di più DRY con gli ambiti di nome.

IE:

Modello

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

Regolatore

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

Visualizza

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

%h2 Female Dogs
= render :partial => 'dogs/summary',  :as => :dog,
  :collection => @female_dogs
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top