Gegeben sei das folgende Beispiel als Basis ... und bitte korrigiere mich, wenn das nicht korrekt eingestellt ist.Wie führe ich eine Sonnenfleckensuche für ein bestimmtes Feld in einer has-many durch:
Migration Files:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :first_name, null: false
t.string :last_name, null: false
t.string :email, null: false
t.timestamps null: false
end
end
end
User.create(first_name:'John', last_name:'Smith', email:'[email protected]') # id: 1
User.create(first_name:'Jane', last_name:'Smith', email:'[email protected]') # id: 2
class CreateCustomAttributes < ActiveRecord::Migration
def change
create_table :custom_attributes do |t|
t.string :name, null: false
t.text :description, null: true
t.timestamps null: false
end
end
end
CustomAttribute.create(name:'is_married', description:'') # id: 1
CustomAttribute.create(name:'has_children', description:'') # id: 2
CustomAttribute.create(name:'number_of_children', description:'') # id: 3
class CreateUserCustomAttributes < ActiveRecord::Migration
def change
create_table :user_custom_attributes do |t|
t.references :user, null: false
t.references :custom_attribute, null: false
t.text :value, null: true
t.timestamps null: false
end
end
end
# John
UserCustomAttribute.create(user_id: 1, custom_attribute_id: 1, value: 'no')
UserCustomAttribute.create(user_id: 1, custom_attribute_id: 2, value: 'yes')
UserCustomAttribute.create(user_id: 1, custom_attribute_id: 3, value: 4)
# Jane
UserCustomAttribute.create(user_id: 2, custom_attribute_id: 1, value: 'no')
UserCustomAttribute.create(user_id: 2, custom_attribute_id: 2, value: 'no')
UserCustomAttribute.create(user_id: 2, custom_attribute_id: 3, value: 0)
Modelle:
class CustomAttribute < ActiveRecord::Base
has_many :user_custom_attributes, :dependent => :destroy
has_many :users, through: :user_custom_attributes
end
class UserCustomAttribute < ActiveRecord::Base
belongs_to :user
belongs_to :custom_attribute
end
class User < ActiveRecord::Base
has_many :user_custom_attributes, :dependent => :destroy
has_many :custom_attributes, through: :user_custom_attributes
searchable do
text :first_name, :last_name, :email
end
end
Ich versuche, "value" zu ermöglichen, dynamisch zu sein, ob es sich um eine einfache boolean (0,1), string ("speedy") oder serialisiertes Array von Elementen ("---- Baseball- Football")
Ist es möglich, nach allen Benutzern zu suchen, die Kinder haben (z. B. "has_children" auf "yes" gesetzt)?
Zum Beispiel:/users fq [has_children] = yes
Auch wäre es möglich, für alle Benutzer mit Kindern zu suchen (z 'NUMBER_OF_CHILDREN' größer als 0)?
Wenn ja, wie würden Sie den 'durchsuchbaren' Block im User-Modell und im User.search-Block strukturieren?