Question

J'ai 2 modèles qui correspondent à 2 tables db séparés.

modèle

1: les mises à jour d'état d'un ex utilisateur. (Commentaire: bonjour | nom d'utilisateur: marc) modèle 2: Les noms de restaurant qu'un utilisateur a mangé au (restaurant: KFC | nom d'utilisateur: marc)

J'ai 1 vue qui affiche les sites restaurant générés à partir d'une recherche Google. Une forme cachée est également généré pour chaque restaurant répertorié. Lorsque l'utilisateur appuie sur le « je mangé ici! » bouton, il soumet ce formulaire caché au contrôleur de restaurants, puis le modèle 2, l'enregistrement du nom de l'utilisateur et le restaurant qu'il a mangé à.

Je veux utiliser le « je mangé ici! » bouton pour afficher également une mise à jour d'état du nom du restaurant modèle 1.

cela doit être fait avec fields_for, mais les 2 modèles ne disposent pas d'une relation entre eux .. que je vois ..

Comment puis-je y arriver?

voici mon pastie: http://www.pastie.org/1280923

J'espère que des thats clair!

Était-ce utile?

La solution

Il n'y a pas une telle chose comme « soumet le formulaire à un modèle ». Les formulaires sont toujours soumis à votre contrôleur.

Avec cela à l'esprit, vous pouvez simplement remplacer la méthode de create ou update sur votre contrôleur pour effectuer toute action que vous voulez.

Votre contrôleur ressemblera à ceci:

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

Cependant, si votre scénario est aussi simple que cela semble, vous pouvez également résoudre ce rappel en utilisant un ActiveRecord sur votre modèle:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top