【问题标题】:render :partial with a manipulated :collection渲染 :partial 与操纵的 :collection
【发布时间】:2009-12-02 15:32:45
【问题描述】:

假设我有一组@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

谢谢。

【问题讨论】:

    标签: ruby-on-rails collections render partial


    【解决方案1】:

    collection 参数只接受一个列表。这没有理由不起作用:

    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
    

    【讨论】:

    • 太完美了。非常感谢!
    • 类狗;定义男性?;性别==“M”;结尾;那么你可以做@dogs.select(&:male?) :)
    • @weppos:这是对最近的 ruby​​ 实现的一个很好的补充。它也适用于 named_scopes 不起作用的情况。
    猜你喜欢
    • 2012-04-16
    • 2012-12-08
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2011-07-28
    相关资源
    最近更新 更多