2013-04-12 16 views
0

我想根據另一個表產品中提到的brand_id檢索品牌名稱。我的品牌id以「brandids」中的數組形式存儲。這是我的控制器代碼。控制器方法中的Rails SQL查詢

def index 
    catids = Array.new 
    brandids = Array.new 
    @products = nil 
    if(!(params[:catid].nil?) && params[:catid].to_s.downcase != "all") 
     catids = arrayConvertion(params[:catid]) 
    end 

    if(!(params[:brandid].nil?) && params[:brandid].to_s.downcase != "all") 
     brandids = arrayConvertion(params[:brandid]) 
    end 

    if(catids.length == 0 && brandids.length == 0) 
     @products = Product.solr_search do 
     paginate :page => params[:page], :per_page => 3 
    end 

    @brands={} 
    @products.each do |p| 
     brand = p.BrandsTest.first(p.brands_test_id) 
     @brands[p.id] = BrandsTest.name 
    end 
end 

,並針對該控制器的看法是:

<% @products.results.each do |p| %> 
     <%= image_tag("Images/#{p.id}.jpeg",:alt => p.name) %> 
     <p> Name: </p> 
     <%= p.name %> 
     <p> Price: </p> 
     <%= p.price %> 
     <p> Discount: </p> 
     <%= p.discount %> 
     <p> Brand Name: </p> 
     <%= @brands[p.id] %> 
<% end %> 

產品型號代碼:

class Product < ActiveRecord::Base 
    belongs_to :brands_test 
    belongs_to :categories_test 
    attr_accessible :id, :name 

    searchable do 
    integer :id 
    text :name 
    integer :brands_test_id 
    integer :categories_test_id 
    end 
end 

我應該需要什麼樣的查詢添加和在那裏我有補充? 請幫我這個。

+0

我想這一點。 '@products = Product.solr_search DO @brands = BrandsTest.solr_search做 用:姓名,brandids [0..brandids.length] PAGINATE:頁=> PARAMS [:頁],:per_page => 3 端 end'。並將viewfile更改爲'<%@ products.results.each do | p | %> <%@ brands.results.each do | b | %>

品牌名稱:

\t <%= b.name %>' 但我得到以下錯誤。沒有爲BrandsTest配置名稱爲'name'的字段 – user2218532

回答

0
@products = Product.solr_search do 
    with :brands_test_id, brandids[0..brandids.length] 
    paginate :page=>params[:page], :per_page=>3 
end 
@brands={} 
@products.each do |p| 
brand=Brand.find_by_id(p.brand_id) 
@brands[p.id]=brand.name 
end 

觀點:

<% @products.results.each do |p| %> 
    #other code 
    <p> Brand: </p> 
    <%= @brands[p.id] 
<% end %> 

我不知道如果我明白你到底做。

+0

我收到此錯誤。產品控制器索引中的Sunspot :: UnrecognizedFieldError 未爲名稱爲「name」的產品配置字段。東西是品牌名不存在於產品表中。所以我需要使用品牌表中的brand_id從品牌表中提取品牌名稱。這就是爲什麼我得到了我認爲的錯誤。 @Joe – user2218532

+0

你是說我的代碼出現這個錯誤?實際上,我的代碼直接從品牌表中獲取品牌名稱,而不僅僅是通過散列產品ID的關鍵,以便您可以輕鬆獲得產品視圖中的價值。 –

+0

是的,我通過您提供的解決方案得到了錯誤... – user2218532

0

我根據我的應用程序對您給出的答案做了一些修改。這裏是控制器部分。

if(catids.length == 0 && brandids.length == 0) 
    @products = Product.solr_search do 
     paginate :page=>params[:page], :per_page=>3 
    end 
    @brands={} 
    @products.results.each do |p| 
     brand=BrandsTest.find_by_id(p.brands_test_id) 
     @brands[p.id]=brand.name 
    end 
end 

這裏是視圖部分:

<% @products.results.each do |p| %> 
    <%= image_tag("Images/#{p.id}.jpeg",:alt => p.name) %> 
<p> Name: </p> 
<%= p.name %> 
<p> Price: </p> 
<%= p.price %> 
<p> Discount: </p> 
<%= p.discount %> 
    <p> Brand Name: </p> 
    <%= @brands[p.id]%> 
<% end %>