ActiveRecord поли добавленный массив против объединенного массива - PullRequest
1 голос
/ 18 декабря 2010

Почему таблица соединений обновляется, когда я вызываю @ user.connections для следующего?

Модель соединения

class Connection < ActiveRecord::Base
    belongs_to :left_nodeable, :polymorphic => true
    belongs_to :right_nodeable, :polymorphic => true

    # Statuses:
    PENDING  = 0    
    ACCEPTED = 1

    named_scope :pending,  :conditions => { :connection_status => PENDING }
    named_scope :accepted,  :conditions => { :connection_status => ACCEPTED }
end

Модель пользователя

class User < ActiveRecord::Base
    has_many :left_connections, :as => :left_nodeable, :class_name => 'Connection', :conditions => {:left_nodeable_type => 'User', :right_nodeable_type => 'User'}
    has_many :right_connections, :as => :right_nodeable, :class_name => 'Connection', :conditions => {:right_nodeable_type => 'User', :left_nodeable_type => 'User'}

    def connections
        self.left_connections << self.right_connections
    end
end

ЕслиЯ использую:

    def connections
        self.left_connections + self.right_connections
    end

Тогда модель работает нормально, но я не могу использовать ни один из моих методов named_scope.

Так что я думаю, мои вопросы сводятся к ...

В чем разница между операторами «<<» и «+» в ActiveRecord?Почему использование «<<» изменяет базу данных, а использование «+» приводит к сбою методов named_scope? </p>

1 Ответ

2 голосов
/ 30 декабря 2010

Модель обновлена, поскольку left_connections обновляется методом <<.Это делает left_connections = left_connections + right_connections.

arr = [1,2]
arr << [3,4]
arr #=> [1,2,3,4]
-------------------------
arr = [1,2]
arr + [3,4] #=> [1,2,3,4]
arr #=> [1,2]

self.left_connections + self.right_connections - правильный способ возврата конкатенации.Что касается ваших методов named_scope, я не могу сказать вам, почему они не работают, не увидев их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...