0

@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

ありがとう。

4

1 に答える 1

4

コレクションの引数はリストを取るだけです。これがうまくいかない理由はありません:

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

個人的には、コントローラーでこれらのリストを作成することを好みます。見栄えが良く、名前付きスコープを使用してよりDRYにすることができると思います。

いいえ:

モデル

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

意見

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

%h2 Female Dogs
= render :partial => 'dogs/summary',  :as => :dog,
  :collection => @female_dogs
于 2009-12-02T15:34:31.010 に答える