mysql - Rails 3 SQL 查询选择与连接

标签 mysql ruby-on-rails ruby-on-rails-3

我在选择函数和连接时遇到问题。

这是我当前的查询。

@search = Building.joins('INNER JOIN "floors" ON "floors"."building_id" = "buildings"."id" INNER JOIN "spaces" ON "spaces".floor_id = "floors".id')

但我想在我的选择中有更多选项来使用 floors.number, space.number 我试过这个

@search = Building.select('buildings.name, floors.number, spaces.number).joins('INNER JOIN "floors" ON "floors"."building_id" = "buildings"."id" INNER JOIN "spaces" ON "spaces".floor_id = "floors".id')

在我看来我错了..这是我的观点

<% for b in @building do %>

<div style='width:100%;margin-left:auto;margin-right:auto;margin-top:5px;'>

    <div style="float:left;width:50%"><%= b.name %></div>
    <div><%= link_to 'view', building_path(b) %></div>

</div>

<% end %>

这是我得到的错误

ActionController::RoutingError in Search_engine#show

Showing /Users/stephanebaribeau/Sites/cadifice/app/views/search_engine/show.html.erb where line #21 raised:

No route matches {:action=>"show", :controller=>"buildings", :id=>#<Building name: "gigi">}

Extracted source (around line #21):

18:     <div style='width:100%;margin-left:auto;margin-right:auto;margin-top:5px;'>
19:     
20:         <div style="float:left;width:50%"><%= b.name %></div>
21:         <div><%= link_to 'view', building_path(b) %></div>
22:         
23:     </div>
24: 

谢谢

在我的选择中添加 building.id、floors.id 和 spaces.id 之后,我尝试显示 floors.number 和 spaces.number

<%= debug @building %>

给我

[#<Building id: 9, name: "234234">]

我不知道为什么我只有 2 个元素,也许是因为选择在 Building.select 上?

谢谢

-- 2009 年 14 月更新

这是我的新 Controller

  @search = Building.select('buildings.id, buildings.slug, floors.id, spaces.id, buildings.name, floors.number, spaces.number').joins('INNER JOIN floors ON floors.building_id = buildings.id INNER JOIN spaces ON spaces.floor_id = floors.id')
  @search = @search.where("buildings.name like '%#{params[:building_name]}%'") if !params[:building_name].blank?
  #@search = @search.where("buildings.name like ?", params[:building_name]) if !params[:building_name].blank?
  if params[:space_type].present?
    @search = @search.where("spaces.space_type_id = ?", params[:space_type][:space_type_id]) if !params[:space_type][:space_type_id].blank?
  end
  @search = @search.where("floors.min_net_rent >= #{params[:floor_min_rent]}") if !params[:floor_min_rent].blank?
  @search = @search.where("floors.max_net_rent <= #{params[:floor_max_rent]}") if !params[:floor_max_rent].blank?

  @building = @search

我现在遇到的问题是调试给我带来了什么。距离大楼只有 2 个字段。是因为 Building.select 吗?我怎样才能把所有内容都放在我的选择字段中?

谢谢。

最佳答案

看看你的代码:

Building.select('buildings.name, floors.number, spaces.number)...

您没有选择建筑物 id,因此在检索它时 Rails 有点迷路。

关于mysql - Rails 3 SQL 查询选择与连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7392846/

相关文章:

ruby-on-rails - 设计、康康和命名空间路由

ruby-on-rails - 使用 redirect_to 并传递额外的参数

css - Rails 3 - will_paginate 插件 - 如何设置样式

ruby-on-rails - Rails 3.1 中的嵌套范围

php - Mysql - 从具有相同结构的多个表中获取数据和总行数

mysql更新表,按价格列排序

php - ORDER BY 最小数字

php - 如何将数据值传递到表单?

ruby-on-rails - 像 Rails 应用程序一样的购物车

javascript - 为什么 javascript 在重置 filterrific 或更改页面时停止工作?