0

私はRubyonRailsにかなり慣れていないので、個人的なプロジェクトとしてディレクトリタイプのWebサイトを作成しています。

私のアプリでは、ユーザーが近くの場所や場所を検索できるようにジオコーダー検索を実装しました。検索は完璧に機能しました。しかし、利用可能な場所の種類を分類するためにタブ付きメニューを追加すると、検索が失敗しました。

なぜ壊れているのかはわかっていると思いますが、修正方法がわかりません。タブには@schools、@ restaurants、および@businesses変数が表示されていますが、これらの変数ではなく検索結果を表示するようにタブを取得するにはどうすればよいですか?これらの変数は、検索が実行されていない場合にのみ表示されますが、検索が実行された場合にも表示されます。

これが私のコードです:

配置コントローラー:

    class PlacesController < ApplicationController
    before_filter :authenticate_user!, except: [:index]

    def index
    if params[:search].present?
     @places = Place.near(params[:search], 50, :order => :distance)
    else
     @places = Place.all
    end

    @schools = Place.where("category = ?", "School")
    @restaurants = Place.where("category = ?", "Restaurant")
    @businesses = Place.where("category = ?", "Business")

    end

Places Index.html.erb:

        <% if user_signed_in? %>

 <div class="row">
    <h2>Newly Added Places</h2>

        <%= form_tag places_path, :method => :get do %>
                <%= text_field_tag :search, params[:search], placeholder: "Enter your zipcode or city", class: "search-query"  %>
                <%= submit_tag "Search Nearby", :name => nil, class: "btn"%>
        <% end %>

            <ul class="nav nav-tabs">
                    <li><a href="#tab1" data-toggle="tab">Schools</a></li>
                    <li><a href="#tab2" data-toggle="tab">Restaurants</a></li>      
                    <li><a href="#tab3" data-toggle="tab">Businesses</a></li>
                </ul>

            <div class="tab-content">
                <div class="tab-pane active" id="tab1">
                    <%= render :partial => "places", :locals => {:places_container => @schools} %>
                </div>
                <div class="tab-pane" id="tab2">
                    <%= render :partial => "places", :locals => {:places_container => @restaurants} %>
                </div>
                <div class="tab-pane" id="tab3">
                    <%= render :partial => "places", :locals => {:places_container => @businesses} %>
                </div>
            </div>
</div>

<br />

<% else %>

<%= render 'static_pages/home' %>

<% end %>

部分的な場所(_places.html.erb):

     <table class="table table-hover table-condensed">
<thead>
        <tr>            
         <th>Image</th>
       <th>Name</th>
       <th>Address</th>
         <th>State</th>
         <th>City</th>
         <th>Type</th>
       <th>Website</th>
     </tr>
</thead>
<% places_container.each do |place| %>
    <tr>
        <th><%= image_tag place.image(:medium)%></th>
        <th><%= link_to place.name, place %></th>
      <td><%= place.address %></td>
      <td><%= place.state %></td>
      <td><%= place.city %></td>
        <td><%= place.category %></td>
      <td><%= place.website %></td>

        <% if current_user.admin? %>
          <td><%= link_to 'Edit', edit_place_path(place) %></td>
          <td><%= link_to 'Destroy', place, method: :delete, data: { confirm: 'Are you sure?' } %></td>
        <% end %>
        </tr>
<% end %>
</table>
4

1 に答える 1

1

@places検索パラメーターから構築された関係を使用していないため、タブ付きの結果は検索パラメーターを無視しています。修正するには、次のコードを変更します。

def index
  if params[:search].present?
   @places = Place.near(params[:search], 50, :order => :distance)
  else
   @places = Place.all
  end

  @schools = Place.where("category = ?", "School")
  @restaurants = Place.where("category = ?", "Restaurant")
  @businesses = Place.where("category = ?", "Business")
end

に:

def index
  if params[:search].present?
   @places = Place.near(params[:search], 50, :order => :distance)
  else
   @places = Place.scoped  # use 'scoped', not 'all', to avoid triggering the query immediately
  end

  @schools = @places.where("category = ?", "School")
  @restaurants = @places.where("category = ?", "Restaurant")
  @businesses = @places.where("category = ?", "Business")
end
于 2013-03-11T02:49:43.433 に答える