如何在rails 2.3.8中使用具有关联的Active scaffold列出活动记录?

时间:2011-07-01 03:59:13

标签: ruby-on-rails ruby activescaffold scaffold

我想列出来自DB的所有记录,这些记录在我的索引页面中都是活动的(true)。

我正在使用带有rails 2.3.8的活动脚手架插件。任何建议如何在我的控制器中添加活动条件?

这是我的管理员控制器

   class Admin::AccountsController < ApplicationController
      active_scaffold :accounts do |config|
       config.list.sorting = {:id => :asc}
       config.list.columns = [:description,:year]
       config.actions = [:create, :update,:list,:search,:delete]
      end
   end

模型

   class Account < ActiveRecord::Base
     has_many :customer_accounts
   end

   class CustomerAccount < ActiveRecord::Base
    belongs_to :account
   end

表格结构

  create_table :customer_accounts do |t|
     t.integer :account_id
     t.active :boolean, :default=>true
     t.timestamps
  end

1 个答案:

答案 0 :(得分:2)

您可以将以下方法添加到控制器,以在活动支架集合上应用条件:

  def conditions_for_collection
    unless has_role?(:admin) # if you want to limit records for non admin users
      ['customer_accounts.active is ?', true]
    end
  end

下面粘贴的是解释ActiveScaffold API上方法的部分:

conditions_for_collection控制器方法

如果要向List使用的find(:all)添加自定义条件,请定义此方法。它可能以字符串或数组语法返回条件。作为控制器上的一个实例方法,它可以访问params和session以及所有标准的好东西。

示例:

def conditions_for_collection
  ['user_type IN (?)', ['admin', 'sysop']]
end

您还可以指定联接以确保关联模型可用于条件:

  def joins_for_collection
    [:customer_accounts]
  end

希望这有帮助。