Class: PgSearch::Configuration::Association
- Inherits:
-
Object
- Object
- PgSearch::Configuration::Association
- Defined in:
- lib/pg_search/configuration/association.rb
Instance Attribute Summary collapse
-
#columns ⇒ Object
readonly
Returns the value of attribute columns.
Instance Method Summary collapse
- #arel_table ⇒ Object
-
#initialize(model, name, column_names) ⇒ Association
constructor
A new instance of Association.
- #subselect_alias ⇒ Object
- #table_name ⇒ Object
-
#to_arel(primary_key) ⇒ Object
Builds an outer join retaining association-scope binds.
Constructor Details
#initialize(model, name, column_names) ⇒ Association
Returns a new instance of Association.
10 11 12 13 14 15 16 |
# File 'lib/pg_search/configuration/association.rb', line 10 def initialize(model, name, column_names) @model = model @name = name @columns = Array(column_names).map do |column_name, weight| ForeignColumn.new(column_name, weight, @model, self) end end |
Instance Attribute Details
#columns ⇒ Object (readonly)
Returns the value of attribute columns.
8 9 10 |
# File 'lib/pg_search/configuration/association.rb', line 8 def columns @columns end |
Instance Method Details
#arel_table ⇒ Object
22 |
# File 'lib/pg_search/configuration/association.rb', line 22 def arel_table = @model.reflect_on_association(@name).klass.arel_table |
#subselect_alias ⇒ Object
39 40 41 |
# File 'lib/pg_search/configuration/association.rb', line 39 def subselect_alias Configuration.alias(table_name, @name, "subselect") end |
#table_name ⇒ Object
18 19 20 |
# File 'lib/pg_search/configuration/association.rb', line 18 def table_name @model.reflect_on_association(@name).table_name end |
#to_arel(primary_key) ⇒ Object
Builds an outer join retaining association-scope binds.
Arguments
primary_keyAn Arel expression or trusted SQL String identifying the model's primary-key column, not a record's key value.
Returns a composable outer join to the search subquery.
32 33 34 35 36 37 |
# File 'lib/pg_search/configuration/association.rb', line 32 def to_arel(primary_key) primary_key = Arel.sql(primary_key) if primary_key.is_a?(String) subquery = relation(primary_key).arel.as(subselect_alias) on_condition = Arel::Nodes::On.new(subquery[:id].eq(primary_key)) Arel::Nodes::OuterJoin.new(subquery, on_condition) end |