渲染:局部有一个被操纵的:集合

时间:2009-12-02 15:32:46

标签: ruby-on-rails collections render partial

假设我有一个@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 个答案:

答案 0 :(得分:4)

集合参数只需一个列表。这没有理由不起作用:

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

查看

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

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