1 кнопка отправки для 2 моделей (fields_for) в Rails 2.3.9 - PullRequest
2 голосов
/ 08 ноября 2010

У меня есть 2 модели, которые соответствуют 2 отдельным таблицам БД.

модель 1: обновления статуса пользователя, напр.(комментарий: hello | username: marc) модель 2: названия ресторанов, в которых ел пользователь (restaurant: KFC | username: marc)

У меня есть 1 просмотр, который показывает сайты ресторанов, сгенерированные из поиска Google.Для каждого перечисленного ресторана также создается скрытая форма.Когда пользователь нажимает «Я ел здесь!»Кнопка, он передает эту скрытую форму контроллеру ресторана, затем модели 2, записывая имя пользователя и ресторан, в котором он ел.

Я хочу использовать «Я ел здесь!»также, чтобы опубликовать обновление статуса названия ресторана для модели 1.

это должно быть сделано с fields_for, но две модели не имеют отношения друг с другом .. что я вижу ..

Как я могу это сделать?

вот моя пасточка: http://www.pastie.org/1280923

Надеюсь, все ясно!

1 Ответ

1 голос
/ 08 ноября 2010

Нет такой вещи, как "отправляет форму модели". Формы всегда отправляются на ваш контроллер.

Имея это в виду, вы можете просто переопределить метод create или update на вашем контроллере для выполнения любого действия, которое вы хотите.

Ваш контроллер будет выглядеть так:

class RestaurantsController < ApplicationController
  def update
    @restaurant = Restaurant.find(params[:id])
    unless @restaurant.update_attributes(params[:restaurant])
      # error while saving: warn user, etc
      return # stops execution
    end

    # restaurant was saved ok, do the additional things you want
    StatusUpdate.create :user_id => @restaurant.user_id, 
                        :comment => "I just ate @ #{@restaurant.name}"

    flash[:notice] = 'Restaurant was successfully updated, and a status update was added.'
    redirect_to :action => 'list'
  end
end

Однако, если ваш сценарий настолько прост, как кажется, вы также можете решить эту проблему с помощью обратного вызова ActiveRecord для вашей модели:

class Restaurant < ActiveRecord::Base
  after_save :append_status_update

  private

  def append_status_update
    StatusUpdate.create :user_id => self.user_id, 
                        :comment => "I just ate @ #{self.name}"
  end
end
...