2013-10-07 2 views
0

Utilisation de Rails 3.2. Je donne les résultats suivants pour l'action Mailer:Méthode d'exclamation dans la méthode du modèle Rails non trouvée lors de la transmission de l'objet

# shop.rb 
class Shop < ActiveRecord::Base 
    def deliver_update_notification!(user) 
    version = self.versions(user).last 
    EditorMailer.updated_spot(self, version).deliver 
    end 
end 

# shops_controller.rb 
class ShopsController < ApplicationController 
    def update 
    @shop = Shop.find(params[:id]) 
    if @shop.update_attributes(params[:shop]) 
     @shop.deliver_update_notification!(current_user) 
     redirect_to shop_path(@shop) 
    else 
     render 'edit' 
    end 
    end 
end 

D'une certaine façon quand je passe dans l'objet current_user à la méthode deliver_update_notification!, il renvoie une erreur disant que la méthode ne peut pas être trouvé. Si la méthode a été modifiée pour ne pas accepter d'objet, la méthode fonctionne. Pourquoi cela se comporte-t-il de cette façon?

Aussi, je ne me souviens pas pourquoi j'ai le point d'exclamation dans la méthode. Je l'ai vu de quelque part. Quel est le but du point d'exclamation?

Merci.

+0

Le but du point d'exclamation est de désigner une action destructive (soit vous modifiez l'objet, soit vous effectuez une action qui ne peut pas être annulée). Quant à votre autre question ... Je ne sais pas, n'avez-vous pas enregistré le fichier Shop ou quelque chose? On dirait que ça devrait marcher – varatis

Répondre

0

Les points d'exclamation sont censés indiquer que la méthode est "dangereuse" et éditer la valeur de l'objet qui l'appelle. Je ne sais pas comment définir les méthodes de bang, mais vous pouvez toujours ne pas utiliser le '!' et en faire une méthode dangereuse en soi.

Questions connexes