2010-07-29 20 views
0

j'ai une partie qui contient un formulaire:partielle contenant une forme apparaît dans les deux contrôleurs, mais ne présente pas l'un d'eux

<% form_for :message, :url => { :action => "create" }, :html => { :id => 'form' } do |f| %> 
    <%= f.error_messages %> 

    <%= f.label :title, "title" %> 
    <%= f.text_field :title %> 

    <%= f.label :tag, "tag" %> 
    <% if controller.controller_name == "tags" %> 
    <%= f.text_field :tag_list, :value => @title %> 
    <% else %> 
    <%= f.text_field :tag_list %> 
    <% end %> 

    <%= f.label :name, "name" %> 
    <%= f.text_field :name %> 

    <%= f.label :email, "email" %> 
    <%= f.text_field :email %> 

    <%= f.label :title, "message" %> 
    <%= f.text_area :content %> 

    <%= f.submit 'submit' %> 

<% end %> 

J'utilise ceci dans deux contrôleurs: messages et balises. Cela fonctionne bien dans le contrôleur de messages mais pas dans le contrôleur de balises. Quand il est rendu dans les balises # show, il remplit automatiquement le champ tag. Lorsqu'un message est envoyé à partir de tags # show, je suis redirigé vers la racine du site avec une erreur flash "Le tag n'existe pas".

contrôleur

tags:

class TagsController < ApplicationController 
    before_filter :redirect_if_doesnt_exist#, :only => :show 

    def show 
    @title = Tag.find(params[:id]).name 
    @tag = Tag.find(params[:id]) 
    @entries = Entry.paginate(Entry.find_tagged_with(@tag), 
      :page => params[:page], :per_page => 10, :order => "name") 
    @messages = Message.paginate(Message.find_tagged_with(@tag), 
      :page => params[:page], :per_page => 10, :order => "updated_at DESC") 
    @related_entries = Entry.tagged_with(@tag, :on => :tags) 
    @related_tags = @related_entries.collect{|x|x.tags}.flatten.uniq 
    @related_tags.delete(@tag) 
    end 

    private 
    # Redirect if requested tag does not exist 
    def redirect_if_doesnt_exist 
    @tag = Tag.find(params[:id]) rescue nil 
    if @tag.nil? # maybe "or @tag.empty?" could solve the empty tag issue 
     flash[:error] = 'Tag does not exist.' 
     redirect_to '/' 
    end 
    end 
end 

Dans le cas où il est clair: La partie est représentée dans la vue, la forme en elle ne vient pas soumettre les données du contrôleur balises et est redirigé. Le partiel fonctionne bien à partir du contrôleur de messages. Ceci est une application Rails 2.3.x. Merci d'avoir lu ma question, votre temps est apprécié.

+0

Vous avez déjà posé la même question: [Formez défaut partiel dans un autre contrôleur] (http://stackoverflow.com/questions/3332655/form-partial-failing-in-other-controller) –

Répondre

1

Votre problème est l'URL de la forme partielle est que l'action:

<% form_for :message, :url => { :action => "create" }, :html => { :id => 'form' } do |f| %> 

Si vous inclure dans une vue qui ne relève pas de messages_controller, il va appeler la mauvaise action. Si vous l'incluez dans une vue de balises, l'action create sera appelée pour tags_controller à la place.

Il va probablement fonctionner si vous ajoutez juste le contrôleur aussi:

<% form_for :message, :url => { :controller => :messages, :action => :create }, :html => { :id => 'form' } do |f| %> 
+0

Merci beaucoup! – BasicObject