如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?

Posted

技术标签:

【中文标题】如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?【英文标题】:How to list active records using Active scaffold with association in rails 2.3.8? 【发布时间】:2011-09-26 11:20:33 【问题描述】:

我想列出数据库中的所有记录,这些记录在我的索引页面中都是活动的(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】:

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

  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) 中添加自定义条件,那么定义这个方法。它可以以字符串或数组语法返回条件。作为控制器上的实例方法,它可以访问参数和会话以及所有标准的好东西。

例子:

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

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

  def joins_for_collection
    [:customer_accounts]
  end

希望这会有所帮助。

【讨论】:

以上是关于如何在 Rails 2.3.8 中使用带有关联的 Active 脚手架列出活动记录?的主要内容,如果未能解决你的问题,请参考以下文章

Rails:在 rails 中使用带有 has_one 关联的 build

如何在 Rails 4 中为多对多关联制作带有子表单的表单?

在 Rails 中,如何在一个查找器中查询两个 has_many 关联?

如何在 Rails 4.0 表单中显示选定记录中的关联值

带有关联的 Rails 范围

带有has_many的模型中的属性总和:通过关联在Rails 5中不起作用