私はRailsの初心者であり、Railsを使用してテーブルを検索しようとしています。これを行うには、SQLの知識を使用しています。しかし、これはレールやルビーのようにも見えません...
私が以下で行っていることを行うためのより良い方法はありますか?(基本的に、日付引数が入力されている場合にのみSQLに渡します)
def search(begin_date=nil, end_date=nil)
subject = " and created_at "
if !(begin_date.nil? || end_date.nil?)
where_part = subject + "BETWEEN :begin_date AND :end_date"
else if (begin_date.nil? && end_date.nil?)
where_part = ""
else if(begin_date.nil?)
where_part = subject + " <= :end_date"
else if (end_date.nil?)
where_part = subject + " >= :begin_date"
end
end
end
end
User.joins(places: {containers: {label: :user}}).where("users.id= :user_id "+where_part, user_id: self.id, begin_date:begin_date, end_date:end_date).group(...).select(...)
end
編集
user.rb
has_many :containers
has_many :user_places
has_many :places, through: :user_places
has_many :labels
place.rb
has_many :containers
has_many :user_places
has_many :users, through: :user_places
container.rb
belongs_to :label
belongs_to :place
belongs_to :user
label.rb
belongs_to :user
has_many :containers
基本的に、特定のユーザーのラベル内または直接的な関係を持つコンテナーの数を場所ごとにカウントし、開始日と終了日でフィルターできるようにしたいです。
この日付のいずれかがゼロである可能性があるため、「クエリ」でこれに対処する必要があります。
私の質問は:どうすればこれをレールの方法で行うことができますか?http://guides.rubyonrails.org/active_record_querying.htmlを見て、おそらくどこかでexceptコマンドを使用できます...しかし、この関係モデルは、ActiveRecordでこれを行うには少し複雑に思えます...どうすればよいですか?私は?、私は本当にActiveRecordを使うべきだと思いますが、どうやって?
ありがとうございました