0

更新しました

Rails 3.2 アプリケーションでデータを検索およびフィルタリングするために、sunspot/solr を使用しています。これは、「Gear」モデルで実行している 2 つの solr 検索の 2 つ目です。

最初の検索では、クエリと適用されたファセットに基づいてビューにすべての歯車が表示されます (歯車はユーザーに属し、ユーザーは多くの歯車を持っています)。

今、私はおそらくこれについて間違って考えています (私はこれをしばらく見ていないからです)。

基本的には新しい検索を作成していますが、これも「ギア」モデルにありますが、別のコントローラー、別のビューにあり、ユーザーのギアの結果のみを検索/フィルター/ファセットしようとしていますが、私はデータベース内のすべてのギアを取得します。

次のエラーが発生しています...

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 に答える