Использование этих двух вместе, вероятно, вызывает ваши проблемы. Оба пытаются определить ingredients_string
метод, который делает разные вещи
attr_accessor :ingredients_string
def ingredients_string
ingredients.join("\n")
end
Избавьтесь от attr_accessor
, before_save
, set_ingredients
метода и определите свой собственный ingredients_string=
метод, что-то вроде этого:
def ingredients_string=(ingredients)
ingredients.each { |x| x.destroy }
ingredients_string ||= false
if ingredients_string
ingredients_string.split("\n").each do |x|
ingredient = Ingredient.create(:ingredient_string => x)
self.ingredients << ingredient
end
end
end
Примечание. Я только что позаимствовал вашу реализацию set_ingredients
. Вероятно, есть более элегантный способ разбить эту строку и создать / удалить связи моделей Ingredient по мере необходимости, но уже поздно, и я не могу думать об этом сейчас. :)