В моей Node
модели у меня ниже ассоциации, где два nodes
связаны в Link
модели:HAS_MANY через ассоциацию не работает
has_many :first_links, class_name: "Link",
foreign_key: "first_node_id"
has_many :second_links, class_name: "Link",
foreign_key: "second_node_id"
belongs_to :organization
я в основном просто хочу, чтобы все ссылки, связанные с узлом, независимо является ли узел first_node
или second_node
. Поэтому у меня есть метод ниже в Node
модели:
def links
first_links + second_links
end
Если теперь я пытаюсь Node.first.links
в консоли, то это работает, и я получаю список всех ссылок на этот узел, независимо, если этот узел является первым или второй узел ссылки. Так что эти отношения, похоже, работают.
В Organization
модели у меня есть:
has_many :nodes
has_many :links, through: :nodes, source: :links
Однако Organization.first.links
в консоли генерирует ошибку:
Could not find the source association(s) "link" or :links in model Node.
Что я делаю неправильно для through
ассоциации?
Update: теперь я понимаю, что мне нужен специальный метод, чтобы собрать все links
для organization
. Следующий из наиболее смысл для меня (добавлено к Organization
модели):
has_many :nodes
def links
nodes.each do |node|
self.links ||= [] #Create the array if it doesn't exist yet.
links << node.links.collect #Add all the links to the array.
end
end
Если я пытаюсь Organization.first.links
в консоли, это производит ошибку ниже. Любая идея, как должен выглядеть метод?
/usr/local/rvm/gems/ruby-2.2.3/gems/activesupport-4.2.5/lib/active_support/dependencies.rb:282:in `blame_file!': can't modify frozen fatal (RuntimeError)
Проблема заключается в том, что мне нужно использовать ассоциацию в 'активной модели serializer'. Я не уверен, что пользовательский метод также будет работать в сериализаторе ...!? – Nick
Пользовательский метод кажется возможным: https: //github.com/rails-api/active_model_serializers/blob/master/docs/general/serializers.md#overriding-association-methods. Я попробую и обновит свой оригинальный пост с помощью метода. – Nick