rendering: parziale con un manipolata: raccolta
-
11-09-2019 - |
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.
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