2014-05-23 5 views
0

En espérant que quelqu'un puisse signaler l'erreur de mes façons ici. J'ai un formulaire avec une action personnalisée avec un bouton standard soumettre:L'action du contrôleur personnalisé ne fonctionne pas

= form_for(@property, :html => {:data => {:abide => ''}, :id => 'property-edit-form'},:url => url_for(:action => 'update_promo')) do |f| 

L'itinéraire est le suivant:

post 'properties/update_promo', :as => 'update_promo' 

L'action du contrôleur est:

def update_promo 
    @property = Property.find(params[:id]) 

    if @property.update(property_params) 
    respond_to do |format| 
     format.html 
     format.js 
    end 
    else 
    render 'edit' 
    end 
end 

Le problème c'est qu'il appelle toujours l'action de mise à jour par défaut. Et j'obtiens l'erreur:

Couldn't find Property with 'id'=update_promo 

Quelqu'un peut-il aider avec ceci?

itinéraires complets ...

get 'users/index' 
    get 'home/index' 

    get 'properties/update_regions', :as => 'update_regions' 
    get 'properties/update_places', :as => 'update_places' 
    get 'properties/update_map', :as => 'update_map' 
    get 'properties/update_promo', :as => 'update_promo' 

    root 'home#index' 

    post "versions/:id/revert" => "versions#revert", :as => "revert_version" 

    resources :properties 

    resources :users do 
    collection do 
     get :properties # add this line 
    end 
    end 
+0

Pourriez-vous poster plus de votre fichier de routes? On dirait que le problème est l'ordre des routes, mais cela aiderait à voir. – DaveMongoose

+0

Merci Dave, ajouté ci-dessus. – steve

+0

try ': action => update_promo_path' Je ne suis pas sûr que cela fonctionnera, c'est pourquoi l'afficher dans le commentaire. –

Répondre

3

Mise à jour votre fichier routes.rb file:

get 'properties/update_promo', :as => 'update_promo' 

à ceci:

post 'properties/update_promo', :as => 'update_promo' 

En outre, vous pouvez changer votre formulaire pour ressembler à ceci:

= form_for(@property, :html => {:data => {:abide => ''}, :id => 'property-edit-form'},:url => update_promo_path)) do |f| 

Vous pouvez utiliser les aides d'URL au lieu de url_for(:action => ...).

+0

Parfait merci mon pote. A fait le tour. – steve

+0

Vous êtes le copain de bienvenue! Essayez aussi d'utiliser url helpers plus que ': action => .. parce que vous pouvez changer les noms des assistants en un seul endroit, mais si vous changez le nom de l'action, vous devrez le mettre à jour partout dans votre base de code. Caveat. :) – Surya

1

Vous OBTENEZ methoding probablement la soumettre si la méthode show est appelée avec l'update_promo id, essayez d'ajouter

:method => :post 

au form_for.

Pour vérifier, regardez le journal lorsque vous soumettez, si votre journal commence par

Started GET 

et non

Started POST 

vous devez ajouter ledit paramter à form_for

+0

Merci, cela a également aidé. – steve

Questions connexes