Ruby on Rails: сохранение объектов и атрибутов модели в другой таблице - PullRequest
1 голос
/ 07 июля 2011

У меня есть 2 таблицы.Например, «Фрукты» и «Еда». Когда я создаю новую запись для таблицы «Фрукты» с соответствующей моделью, как мне сохранить объекты и атрибуты этой таблицы в другой таблице под названием «Все»?

Или проще:Как обновить другую таблицу при сохранении новой записи?

Мне нужно что-то вроде «обновить значение, где id = x»

Ответы [ 3 ]

4 голосов
/ 07 июля 2011

Вы должны сделать что-то вроде этого:

class Fruits < ActiveRecord::Base

    after_save :update_the_all_table

    private

        def update_the_all_table
            allobject = All.find(self.id)
            allobject.someattribute = self.someattribute # self is the fruit
            allobject.save
        end

end

Чтобы вы знали, вы также можете сделать следующее, если не хотите писать "private"!

class Fruits < ActiveRecord::Base

    after_save { |fruit|
        allobject = All.find(fruit.id)
        allobject.someattribute = fruit.someattribute
        allobject.save
    }

end
1 голос
/ 07 июля 2011

Вы можете использовать Обратные вызовы для выполнения действий с такими событиями, как сохранение.

Остерегайтесь дублирования данных, если вы просто пытаетесь создать таблицу, содержащую всю ту же информацию, что и другие таблицывам может потребоваться запросить ваши данные по-другому.

0 голосов
/ 21 апреля 2014

Лучшей практикой в ​​этом случае является использование наблюдателей .

1) Добавить к вашему Gemfile:

gem 'rails-observers'

2) Пробег:

bundle install

3) Создать новый файл app/models/fruit_observer.rb:

class FruitObserver < ActiveRecord::Observer
  def after_save(fruit)
    # Any actions with other models and tables must stay here.
    # Example:
    All.create(
      name: fruit.name,
      entitable_type: fruit.class.to_s,
      entitable_id: fruit.id
    )
  end
end

4) Добавить к вашему application.rb:

config.active_record.observers = :fruit_observer

5) Запустите сервер / консоль и проверьте это!

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