在 rails 应用中按送货区域搜索餐厅 (2)

Search restaurants by delivery area in a rails app (2)

我想在 rails 应用的 ruby 中通过 delivey_area 搜索餐厅。我创建了一个多对多关系。在控制台中一切正常,但是当我 select 我的搜索表单中的一个区域不起作用..我想我的餐厅控制器有问题

## restaurant.rb
class Restaurant < ApplicationRecord
 has_and_belongs_to_many :areas
end

## area.rb
class Area < ApplicationRecord
 has_and_belongs_to_many :restaurants
end 

## migration (for rails 5.0)


  class CreateJoinTableAreaRestaurant < ActiveRecord::Migration[5.0]
  def change
    create_join_table :areas, :restaurants do |t|
      # t.index [:area_id, :restaurant_id]
      # t.index [:restaurant_id, :area_id]
    end
  end
end


# in view:
<div class="field">
  <%= f.label :delivery_areas %>
  <%= f.collection_check_boxes :area_ids, Area.all, :id, :name do |b| %>
    <div class="collection-check-box">
      <%= b.check_box %>
      <%= b.label %>
    </div>
  <% end %>
</div>

## restaurants_controller.rb
def index
  @restaurants = Restaurant.all.order("created_at DESC")
  if params[:area].blank? 
    @restaurants = Restaurant.all.order("created_at DESC")
  else 
    @area_id = Area.find_by(name: params[:area]).id 
    @restaurants = Restaurant.where(:area_id => @area_id).order("created_at DESC")
  end 
end

## search form
<ul class="dropdown-menu scrollable-menu" aria-labelledby="dropdownMenu1" style="width: 440px;">
                  <% @areas.each do |area| %>
                    <li>
                      <%= link_to area.name, restaurants_path(area: area.name), class: "link" %>
                    </li>
                  <% end %>
</ul>

我认为您的迁移代码不应该在其中定义关系。

From Rails API:

class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration
  def change
    create_table :developers_projects, id: false do |t|
      t.integer :developer_id
      t.integer :project_id
    end
  end
end