从一个检索一行记录有很多关联查询结果

时间:2014-07-19 14:27:47

标签: ruby-on-rails ruby ruby-on-rails-4

Restaurant Load (1.5ms)  SELECT * FROM "restaurants" INNER JOIN "restaurant_branches" ON "restaurant_branches"."restaurant_id" = "restaurants"."restaurant_id"
+----------+---------+---------+---------+----------+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+-------+
| resta... | res_... | res_... | crea... | updat... | user_id | resta... | addr... | addr... | addr... | addr... | addr... | addr... | numb... | numb... | email |
+----------+---------+---------+---------+----------+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+-------+
| 27       | DOGG... | WE S... | 2014... | 2014-... | 4       | 28       | 405 ... |         | CHICAGO | IL      | 60666   | USA     |         |         |       |
| 27       | DOGG... | WE S... | 2014... | 2014-... | 4       | 29       | 111 ... |         | CHICAGO | IL      | 60661   | USA     |         |         |       |
+----------+---------+---------+---------+----------+---------+----------+---------+---------+---------+---------+---------+---------+---------+---------+-------+

从我的rails控制台输出中可以看到,餐厅有两行记录。但是,有两个不同的地址。我如何在我的控制器的show部分执行此操作,以便只将该特定行传递到我的show.html.erb表单?

目前,这就是我的节目:

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

  def index
    @restaurant = Restaurant.select('*').joins(:restaurant_branches)
  end

  def show
    @restaurant = Restaurant.find(params[:id])
    #@restaurant = Restaurant.select('*').joins(:restaurant_branches).find_by.restaurant_branch(params[:id])
  end

  def new
    @restaurant = Restaurant.new
  end

  def create
    if user_signed_in?
      @restaurant = Restaurant.new(restaurant_params)
      if @restaurant.save
        redirect_to @restaurant
      else
        render 'new'
      end
    else
      redirect_to new_owner_session_path
    end
  end

  def edit
    @restaurant = Restaurant.find(params[:id])
  end

  def update
    @restaurant = Restaurant.find(params[:id])
    if @restaurant.update_attributes(restaurant_params)
      flash.now[:notice] = "You have successfully updated #{@restaurant.res_name.titleize}."
      redirect_to @restaurant
    else
      render 'edit'
    end
  end

  def destroy
    @restaurant = Restaurant.find(params[:id])
    @restaurant.destroy
    flash.now[:notice] = "#{@restaurant.res_name.titleize} has been deleted!"
    redirect_to restaurants_url
  end

  private

  def restaurant_params
    params.require(:restaurant).permit(:res_name, :res_description, restaurant_branches_attributes: [ :id, :address_line1, :address_line2, :address_line3, :address_line4, :address_line5, :address_line6, :number_phone, :number_fax, :email, :_destroy, pictures_attributes: [ :id, :name, :image, :_destroy] ] ).merge(user_id: current_user.id)
  end
end

我尝试过像@restaurant = Restaurant.joins(:restaurant_branches).find(params[:id])这样的事情但是没有找到任何运气。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为什么不尝试通过restaurant_branch而不是id来查找记录?

    def show
      @restaurant = Restaurant.find_by_restaurant_branch(params[:id])
    end
相关问题