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

しかし、すでに支払われたセッションを除外したいです。Scheduled_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 です。 .

したがって、この解決策を考え出すために、私は経費モデルをしばらく無視します。ここでは、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 に答える