2014-11-18 2 views
1

Привет Я работаю над одним приложением, которое имеет так много отношений на модели. Теперь я собираюсь сократить строку кода, и я нахожу так много отношений, как has_many и belongs_to.many принадлежит_to и has_many в одной строке

Может мы опалить линию, где мы можем написать что-то вроде

belongs_to [:comment, :rating, :indication], dependent: :destroy

belongs_to :travels, foreign_key: travel_item_id

ответ

3

К сожалению, нет. AFAIK это невозможно, и даже документация, похоже, не позволяет этого. Что вы можете сделать, это определить метод метапрограммирования, который перебирает массив и создает эти ассоциации. Но не уверен, стоит ли это.

EDIT

Просто пример того, что я имею в виду metaprogramming method Создайте файл app/models/concerns/associate.rb

module Associate 
    extend ActiveSupport::Concern 

    module ClassMethods 
    def associate(ass_type, names = [], params = {}) 
     names.each do |n| 
     send ass_type, n, params 
     end 
    end 
    end 
end 

Тогда в вашей модели, чтобы сделать мультипликатор belongs_to, просто сделать

include Associate 
associate :belongs_to, [:comment, :rating, :indication], dependent: :destroy 
+0

Да. То, что я сделал точно, когда вы сказали метапрограммирование. Большое спасибо за подробный ответ. Это действительно помогло мне. –

Смежные вопросы