3

レールの使用 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があります)ちなみに、必要なすべての施設を備えたホテルを作成できますとなり、両者の関係は正しい。

どんな助けでも大歓迎です

4

1 に答える 1

5

他のテーブルに結合するには、joins 句を追加する必要があります。

.joins(:facilities_hotels).where('facilities_hotels.facility_id = ?', params[:fc])
于 2012-04-20T17:54:00.773 に答える