如何在 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 中为多对多关联制作带有子表单的表单?