レールの使用 3.2.3.
これは私を夢中にさせています。アクティブレコードがこれらのタイプのアクションを簡素化することになっていることは知っていますが、それについて理解することはできません.
ホテルと施設のモデルがあります。どちらにも has_and_belongs_to_many 関係があります。ホテルには多くの施設があります。私の目標は、名前/場所、評価、施設でホテルを検索することです。
最初の 2 つは検索できますが、施設 (検索フォームのチェックボックス) で検索できません。
コードを表示:
<%= form_tag hotels_path, :method =>'get' do%>
<p>
<b>Location:</b>
<%= text_field_tag :search, params[:search]%><br /><br />
<b>Rating:</b><br />
<%= radio_button_tag :ranking, '5'%>5 Stars<br />
<%= radio_button_tag :ranking, '4'%>4 Stars<br />
<%= radio_button_tag :ranking, '3'%>3 Stars<br />
<%= radio_button_tag :ranking, '10'%>Hostels<br /><br />
<b>Facilities:</b><br />
<% for facility in Facility.find(:all) %>
<div class="field">
<%= check_box_tag "fc[]", facility.id%>
<%= facility.description %>
</div>
<% end %>
<%= submit_tag "Search", :name => nil%>
</p>
<%end%>
ホテルコントローラー:
def index
@hotels= Hotel.search(params)
respond_to do |format|
format.html
format.json { render :json => @hotels }
end
end
ホテルモデル:
def self.search(params)
if params
arel = where('city LIKE ? OR name LIKE ?', "%#{params[:search]}%", "%#{params[:search]}%")
arel = arel.where('ranking = ?', params[:ranking]) if params[:ranking].present?
#arel = arel.where (' = ?', params([:fc])) -> i dont know what to put here
arel
else
all
end
end
基本的には、名前/場所を取得し、ランキングで絞り込み、選択したチェックボックスでさらに絞り込む必要があります。最後が取れない。名前/場所と評価はhotelsテーブルにありますが、各ホテルの施設はfacilities_hotelsジョイントテーブルにあります(そのテーブルにはキーとしてhotel_idとfacility_idがあります)ちなみに、必要なすべての施設を備えたホテルを作成できますとなり、両者の関係は正しい。
どんな助けでも大歓迎です