私は3つのテーブル「ハードウェア」、「倉庫」と「ブランド」とテーブルはこのように一緒にreferncedされましたを選択し、複雑なmysqlの変換ウェアハウスビューでは、このように動作する検索ドロップダウンメニューがあります。メニューから「ブランド」を選択し、サブミットをクリックすると、アプリケーションは選択されたオブジェクトと選択したすべてのウェアハウスオブジェクトを返します。 問題は、私が前に示したように、ウェアハウステーブルはブランドに関連していないため、倉庫とブランドに加わる外来キーはありません。 だから私は、このMySQLのクエリは内部のアプリケーションレールに変換する方法を試みなければならない:。レールに3.1
SELECT W1は*倉庫W1、ハードウェアさh1 w1.hardware_id = h1.idとh1.brand_id = 3
FROMこれは、私のコード:
class WarehousesController < ApplicationController
def search
generate_selects true
respond_to do |format|
format.html # search.html.erb
format.js {render :partial => 'get_models'}
format.xml { render :xml => @warehouse }
end
end
def search_result
if request.post? && params[:from_form]
session[:sa_query_flatten] = sa_query.flatten #Memorizzo sulla session per riutilizzarla in "aggregate_by_position" e will_paginate per page > 1
end
conditions = session[:sa_query_flatten]
logger.debug "QUERY: #{conditions} SESSION:#{session[:sa_query_flatten].inspect}"
@products = Warehouse.find(:all,:conditions => conditions)
@search_count = @products.count
@products = @products.paginate(:page => params[:page], :per_page => 100)
@search_start = ((params[:page].to_i - 1)* 100) + 1
@search_end = (params[:page].to_i * 100) - 1
if @search_start < 0
@search_start = @search_start + 100
end
if @search_end < 0
@search_end = @search_end + 100
end
if @search_end > @search_count
@search_end = @search_count
end
respond_to do |format|
format.html
format.js
end
end
def generate_selects(search)
if !search
@hardwares ||= Hardware.where({:brand_id => @warehouse.hardware.brand_id}).map{|hw| [hw.model,hw.id]}.sort
if session[:user_role] != "administrator"
@ingress_transport_documents = IngressTransportDocument.filtered_by_registry(session[:registry_id]).map{|itd| [itd.number,itd.id]}.sort
else
@ingress_transport_documents = IngressTransportDocument.all.map{|itd| [itd.number,itd.id]}.sort
end
end
@brands = Brand.all.map{|br| [br.name,br.id]}.sort
@positions = Position.all.map{|pos| [pos.name,pos.id]}.sort
@states = State.all.map{|st| [st.name,st.id]}.sort
@logicalWH = Logicalwarehouse.all.map{|lw| [lw.name,lw.id]}.sort
@extra = Extra.all.map{|ex| [ex.name,ex.id]}.sort
@registries = Registry.all.map{|cs| [cs.name,cs.id]}.sort
end
def sa_query
if params[:warehouse]
session[:params_warehouse] = params[:warehouse]
else
params[:warehouse] = session[:params_warehouse]
end
query = String.new
query_array = Array.new
if params[:enable_asset] == "1"
query << "asset LIKE ? AND "
query_array.push(params[:asset] + "%")
end
if params[:enable_serial] == "1"
query << "serial LIKE ? AND "
query_array.push params[:serial] + "%"
end
if params[:enable_brand] == "1"
query << "**brand** => = ? AND "
query_array.push Brand.find(params[:brand]).name # Qui va messo brand, non brand_value
end
if params[:enable_model] == "1"
query << "hardware_id.model = ? AND "
query_array.push params[:model]
end
if params[:enable_position] == "1"
query << "position_id = ? AND "
query_array.push params[:position]
end
if params[:enable_logicalwarehouse] == "1"
query << "logicalwarehouse_id = ? AND "
query_array.push params[:logicalwarehouse]
end
if query.index("AND ",-4) != nil
query = query[0,query.length-5]
end
[query,query_array]
end
MySQLは、クエリの入力パラメータとして任意の提案をブランドを待つのか?
okこれを行うと、ウェアハウステーブルをブランドにリンクするために、ウェアハウスに外部キーを追加する必要がありますか? – Marco
yes、ウェアハウステーブルのbrand_id。 –