1

我有一个表格来记录教师的付款。付款记录在费用表中。我有以下工作正常:

<%= f.grouped_collection_select :scheduled_session_id, User.where(:role => 'instructor'), :scheduled_sessions, :full_name, :id, :identifier_with_cost, :include_blank => true %>

它显示一个选择菜单,其中包含讲师姓名及其分配的课程。例如...

Peter Parker
  Biology    $350 April 27
  Chemistry  $400 April 28
Professor X
  Genetics   $400 April 27
  History    $350 April 28
  Literature $350 April 29

但我想排除已经支付的会话。schedule_sessions 表有一个名为“paid”的布尔列。

我可以使用该查询进行查询,ScheduledSession.where(paid: [false, nil])但如何在 grouped_collection_select 上实现它?

4

1 回答 1

2

在仔细查看文档之后,(你知道在编码一段时间后大脑无法处理太多信息,这就是我本周实施番茄技术的原因)grouped_collection_select(object, method, collection, group_method, group_label_method, option_key_method, option_value_method, options = {}, html_options = {}) public:,它是一个提供子记录列表的 group_method .

因此,为了提出这个解决方案,我暂时忽略了 Expense 模型。我现在只关心 User 和 ScheduledSession 模型,因为这将生成我的选择菜单。我在父模型中创建了一个方法:

class User < ActiveRecord::Base
has_many :scheduled_sessions, :foreign_key => 'instructor_id'

def not_paid_scheduled_sessions
   ScheduledSession.where(:instructor_id => self.id).where(paid: [false, nil])
 end

所以,而不是...

f.grouped_collection_select :scheduled_session_id, User.where(:role => 'instructor'), :scheduled_sessions, :full_name, :id, :identifier_with_cost, :include_blank => true

我用...

f.grouped_collection_select :scheduled_session_id, User.where(:role => 'instructor'), :not_paid_scheduled_sessions, :full_name, :id, :identifier_with_cost 

希望它也对其他人有所帮助。

于 2012-04-30T16:47:21.453 回答