我是一個rails新手,並且正在嘗試使用rails在表上執行搜索,並且我只是使用我的sql知識來完成此操作。但是,這似乎並不像鐵軌或紅寶石甚至...如何在rails中添加條件where子句
有沒有更好的方法來做我在下面做的事情? (基本上,僅傳遞日期參數爲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
EDIT
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
容器。 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,但怎麼樣?
謝謝
[這裏是如何做一個很好的例子,加入與活動記錄] [1] [1]:http://stackoverflow.com/questions/764538/ruby-on-rails-how -to-join-two-tables – 2012-07-27 15:05:38
嗨,我的問題不在於連接...我只是沒有寫出它們,因爲它們不相關。我的事情是有條件的搜索參數 – MrWater 2012-07-27 15:13:20
@itsalltime - 我想Bob想說的是 - 爲什麼不使用Active Record而不是直接編寫SQL? http://guides.rubyonrails.org/active_record_querying.html – JasCav 2012-07-27 15:16:42