Je suis en train d'obtenir ma tête autour de celui-ci:Rails: redirect deux pages en arrière
Supposons que vous avez deux modèles où:
: bar has_many: foos
Et vous avez une url comme ceci: http://myapp.com/24-name-of-the-bar-to-param/foos/new
Sur mon site cette page montre beaucoup d'informations sur la barre pour laquelle les utilisateurs vont créer un foo. Ainsi, même si un utilisateur n'est pas connecté, l'utilisateur pourra toujours voir les informations.
Actuellement, lorsque l'utilisateur est connecté, un formulaire pour créer un nouveau foo est sur le côté gauche de la page Web. Lorsque l'utilisateur n'est pas connecté il est dit "Merci de vous connecter ou de vous inscrire"
Le formulaire explique beaucoup de choses sur le fonctionnement de mon application, aussi j'aimerais le changer de façon à ce que même si un utilisateur n'est pas connecté le formulaire s'affichera, et s'il clique sur submit, il les emmènera sur le login_path puis, une fois connecté, sur le chemin où le formulaire a été envoyé.
Je suis en ce problème: Actuellement, j'ai une méthode login_required dans mon contrôleur d'application comme ceci:
def store_location
session[:return_to] = request.request_uri
end
def login_required
unless current_user || admin?
store_location
flash[:notice] = "Please log in"
redirect_to login_path and return false
end
end
Cette connexion action requise est appelée à l'action de créer de la foo. Lorsque je clique sur soumettre sur le formulaire, il m'amène à http://myapp.com/foos au lieu de http://myapp.com/24-name-of-the-bar-to-param/foos/new
Je suppose que c'est parce que la fonction de connexion requise est appelée sur l'action de création et non sur la nouvelle action.
Des idées?
Mise à Jour par demande est ici le code du contrôleur et callbacks:
before_filter :find_bar, :except => [:index, :edit, :update]
before_filter :login_required, :only => [:create]
ssl_required :edit, :update
def new
@foo = Foo.new :amount => "0.00"
@foos = Foo.find(:all, :conditions => ["bar_id = ?", @bar.id], :order => "created_at DESC").paginate :page => params[:page], :per_page => 10
@foos_all = Foo.find(:all, :conditions => ["hatlink_id = ?", @hatlink.id], :order => "created_at DESC")
@current_user = current_user
@topfooers = User.bar_amount(@bar, nil)
@average_foo = @bar.foos.average('amount')
end
def create
@foo = @current_user.foos.build params[:foo]
if (@bar.foos << @foo)
flash[:notice] = "Thank you for fooing!"
redirect_to new_bar_foo_path(@bar)
else
render :action => :new
end
end
private
def find_bar
@bar_id = params[:bar_id]
return(redirect_to(categories_path)) unless @bar_id
@bar = Bar.find(@bar_id)
end
Je suis intéressé par l'histoire de la problem.:- –
Veuillez poster le code de create action et before_filters vous utilisez –
Pourrions-nous voir les actions du contrôleur? – davidcelis