2010-09-12 9 views
2

je les classes de modèle suivants:Rails form_for modèle différent contrôleur

class Upload < ActiveRecord::Base 
    ... 
    has_many :reviews, :order => "created_at DESC" 
    ... 
end 

class Review < ActiveRecord::Base 
    ... 
    belongs_to :upload 
    belongs_to :user 
    validates_presence_of :description 
    ... 
end 

Mon point de vue upload/show a une forme pour capturer un commentaire pour le téléchargement spécifique:

<% form_for(@review) do |f| %> 
    <%= f.error_messages %> 
    ... 
    <p> 
    <%= f.text_area :description, :rows => 5, :cols => 80 %> 
    </p> 
    ... 
    <p> 
    <%= f.submit 'Submit Review' %> 
    </p> 
<% end %> 

Lorsque la La validation de la révision échoue. Comment puis-je afficher les messages d'erreur dans le formulaire de révision qui fait partie de la vue de téléchargement?

Mon ReviewController fait ceci:

def créer @review = current_user.reviews.new (params [: revue])

if @review.save 
    flash[:notice] = 'Review was successfully created.' 
    redirect_to(@review.upload) 
else 
    render :action => :new 
end 

fin

Il est évident que render :action => :new ne fonctionne pas parce que je besoin d'afficher l'action show du UploadsController et non la nouvelle action du ReviewsController.

Je suis assez sûr qu'il y a un moyen simple de le faire, je ne peux pas le comprendre!

Répondre

2

Votre action contrôleur de contrôle doit recevoir le params['upload_id'] pour associer la révision à son téléchargement, soit via l'URL (si les avis sont un itinéraire imbriqué comme POST /uploads/1/reviews), ou à partir d'un champ masqué.

Vous pouvez utiliser render :template pour faire votre redirection:

def create 
    @review = current_user.reviews.new(params[:review]) 
    @upload = Upload.find(params['upload_id']) 
    @review.upload = @upload 
    if @review.save 
    flash[:notice] = 'Review was successfully created.' 
    redirect_to(@upload) 
    else 
    flash[:error] = 'Review could not be created.' 
    render :template => 'uploads/show' 
    end 
end 

Il est également acceptable de rendre simplement la forme de l'examen par lui-même (à savoir la valeur par défaut "critiques/nouveau) jusqu'à l'entrée de la forme est correcte au lieu de montrer toute la page pour le téléchargement.

Questions connexes