0

基本的に3つのフィールドを持つ Project Model と ProjectAttribute Model があります: name value project_idProjectに関するキーレコードを格納するために使用されます。以下のアプローチを試しましたが、成功しませんでした。

project.rb

class Project < ActiveRecord::Base
  has_many :project_attributes

  searchable do
    text :title, :boost => 2
    text :description
    string :att_name, :multiple => true do
      project_attributes.map { |p| p.name }
    end

    string :att_value, :multiple => true do
      project_attributes.map { |p| p.value }
    end

  end
end

ProjectAttribute フィールドをProject.searchの基準として使用して、3 つの部屋を持つすべてのプロジェクトを取得することは可能ですか?

元:

Project.search do 
    with(:att_name, 'rooms')
    with(:att_value, '3')
end
4

1 に答える 1

-2

太陽黒点は必要ありません - 基本的な ActiveRecord クエリとスコープでこれを行うことができます。

簡単に始めましょう: 3 つの部屋を持つプロジェクトを見つけたいだけです。クエリは次のようになります。

Project.joins(:project_attributes).where("project_attributes.name = 'rooms' AND project_attributes.value = '3'")

それをスコープに変えますProject

scope :search, joins(:project_attributes).where("project_attributes.name = 'rooms' AND project_attributes.value = '3'")

もちろん、変数入力を受け入れたい:

scope :search, lambda { |name, value| joins(:project_attributes).where("project_attributes.name = ? AND project_attributes.value = ?", name, value) }

これにより、次のことが可能になります。

Project.search("rooms","3")
于 2013-03-26T09:53:45.897 に答える