Frage

Sagen, dass ich eine Sammlung von @dogs haben, und ich möchte ein Teil der Sammlung an einem Ort und den Rest in einem anderen machen. Es ist einfach, sie alle zusammen zu spucken:

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

Aber ist es möglich (verfeinern) Ihre Sammlung in-line zu manipulieren, oder ist es besser Praxis diese Definitionen in Ihrem Controller zu machen und so etwas wie:

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

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

Danke.

War es hilfreich?

Lösung

Die Sammlung Argument nimmt nur eine Liste. Es gibt keinen Grund, warum dies nicht funktionieren würde:

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

Persönlich diese Listen im Controller Ich ziehe zu schaffen. Ich denke, sieht besser aus und kann viel mehr DRY mit Scopes gemacht werden.

IE:

Modell

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

Controller

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

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

%h2 Female Dogs
= render :partial => 'dogs/summary',  :as => :dog,
  :collection => @female_dogs
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top