0

更新

我正在使用 sunspot/solr 在我的 Rails 3.2 应用程序中搜索和过滤数据。这是我在“Gear”模型上执行的两次 solr 搜索中的第二次。

我的第一次搜索根据查询和应用的方面显示视图中的所有齿轮(一个齿轮属于一个用户,一个用户有很多齿轮)。

现在我可能正在错误地思考这个问题(因为我有一段时间没看过这个了)。

基本上我现在正在建立一个新的搜索,但这也在“齿轮”模型上,但它在不同的控制器、不同的视图中,我试图只搜索/过滤/刻面用户齿轮的结果,但我是获取数据库中的所有齿轮。

出现以下错误...

为 nil 调用 id,它会错误地为 4——如果你真的想要 nil 的 id,请使用 object_id

我错过了什么?

在控制器中显示动作

   def show
     @store = Store.find(params[:id])
     @user = @store.user
     @search2 = Gear.solr_search do
          fulltext params[:search]        
          facet (:category_name)
          facet(:sub_category_name)
          facet (:state)
          facet (:city)
          facet (:price)
          with(:user_id, @user.id)
          with(:price, params[:price]) if params[:price].present?
          with(:state, params[:state]) if params[:state].present?
          with(:city, params[:city]) if params[:city].present?
          with(:sub_category_name, params[:name]) if params[:name].present?
          with(:category_name, params[:categoryname]) if params[:categoryname].present?
          paginate(page: params[:page], :per_page => 15)
     end

     @gears = @search2.results
  end

在尝试太阳黑子之前,我正在这样做@gears = @store.user.gears.paginate(page: params[:page]) 。

齿轮型号

class Gear < ActiveRecord::Base
  attr_accessible :title, :size, :price, :sub_category_id, :user_id, :image, :image_a, :image_b, :image_c, :image_d, :image_e, :image_f, :image_g, :image_h, :image_i, :remote_image_url, :color, :year, :latefee, :cancellation, :minrental, :policy, :about, :address, :city, :state, :zip, :country, :latitude, :longitude, :gmaps
  belongs_to :user
  belongs_to :sub_category

  searchable do
     text :title, :size, :price, :year, :zip, :state, :city, :minrental, :about, :latefee, :color

     text :user_firstname do
          user.firstname
     end

     text :user_lastname do
          user.lastname
     end
     # **Facet Section**   

     string :size 
     string :price
     string :state
     string :city

     string :sub_category_name , :multiple => true, :stored => true do
       sub_category.name
     end

     string :category_name, :multiple => true, :stored => true do
       category.name
     end
   end
end

店铺模式

class Store < ActiveRecord::Base
  attr_accessible :storeimage, :storename
  belongs_to :user
  mount_uploader :storeimage, StoreUploader
end

用户模型

class User < ActiveRecord::Base 

  attr_accessible :email, :password, :password_confirmation, :remember_me, :firstname, :lastname, :userimage, :remove_userimage, :name
  has_many :gears
  has_many :comments, :dependent => :destroy 
  has_one :store, :dependent => :destroy
  require 'carrierwave/orm/activerecord'
  mount_uploader :userimage, UserpicUploader
  accepts_nested_attributes_for :store


end
4

1 回答 1

1

更新

感谢您发布模型代码。请检查这是否适合您。注意user = @store.user控制器动作中的赋值使用局部user变量而不是实例变量@user:user_ids添加到可搜索字段后,不要忘记重新索引您的模型。

class Gear < ActiveRecord::Base
  searchable do
    integer :user_id
  end
end

# now the controller action
def show
  @store = Store.find(params[:id])
  user = @store.user

  @search2 = Gear.solr_search do
    with(:user_id, user.id)
    # all other search code omitted for brevity
  end
end
于 2012-12-13T12:31:09.627 回答