Расширения ассоциации Rails: переопределить метод назначения HABTM (collection =) - PullRequest
3 голосов
/ 16 ноября 2011

В вопросе, на который я ранее ответил , я использовал расширение ассоциации для переопределения метода добавления (<<) коллекции HABTM (также, аналогичный вопрос ):

has_and_belongs_to_many(:countries) do
  def <<(country)
    if [*country].all? {|c| c.is_a?(String) }
      countries = Country.where(:code => country)
      concat(*countries)
    else
      concat(country)
    end
  end
end

Это, вероятно, не поощряется, но мой вопрос заключается в том, как можно, если вообще возможно, переопределить оператор присваивания, чтобы я мог сделать countries = ['IL', 'US'] с теми же результатами?

1 Ответ

0 голосов
/ 01 июня 2013

Я думаю, что это может быть что-то вроде:

def =(countries)
  values = countries.kind_of?(Hash) ? countries.values : countries
  values.each do |country|
    self << country
  end
end

Я не уверен, что вы можете использовать оператор << таким образом. </p>

...