rails before_filter阻止从成功保存创建方法

时间:2012-04-12 14:35:57

标签: ruby-on-rails before-filter

所以我制作了一个启动页面,并按照post设置了重定向。但它搞砸了应用程序。当我下面的代码到位时,该应用程序不会保存用户提交的电子邮件地址。 (当我注释掉重定向代码时,一切正常。)

class ApplicationController < ActionController::Base
  protect_from_forgery
  include SessionsHelper

   before_filter(:except => :splash) do
     redirect_to root_path
   end

 end

这是控制器。它基于Railscast#124。因此对于启动页面,没有用户登录,这意味着在邀请保存后,它应该保存并闪存“谢谢,我们将在准备好时通知”。但是当上面的过滤器到位时,它只是重新渲染“新”。

class InvitationsController < ApplicationController

  def new
    @invitation = Invitation.new
  end

  def create
    @invitation = Invitation.new(params[:invitation])
    @invitation.sender = current_user
    if @invitation.save
      if signed_in?
        UserMailer.invitation(@invitation).deliver
        flash[:notice] = "Thank you, invitation sent."
        redirect_to hunts_path      
      else
        flash[:notice] = "Thank you, we will notify when we are ready."
        redirect_to root_path  
      end
    else
      render :action => 'new'
    end
  end

end

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:2)

嗯,不确定,但是你将@invitation.sender设置为当前用户,保存后你测试signed_in?。如果用户未登录,是否无法保存邀请?

编辑:抱歉,监督你说如果删除重定向,一切正常。我认为这个重定向可以防止其他操作做任何事情(顺便说一句,你只能重定向一次)。