simple_form_for重定向提交

时间:2012-07-12 19:29:46

标签: ruby-on-rails ruby redirect simple-form

我是Ruby on Rails中的noob,我有一个愚蠢的问题: 在我的session_controller中我有

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
      session[:user_id] = user.id
      redirect_to root_path, :notice => "Logged in!"
    else
      flash.now.alert = "Invalid email or password"
      render "new"
    end
  end

我所拥有的路线   匹配'/ signin',到:'sessions#new'

在new.html.haml我有

  = simple_form_for :session do |f|
    = f.input :email
    = f.input :password
    = f.button :submit, 'Sign in!'

当我按下“登录”按钮时,我希望调用“创建”方法(它在我的用户模型中如何工作),但调试显示“新”方法,我有“authenticity_token”,没有填写电子邮件和密码。 有人能解释一下heppens是什么? 我不明白方法“新”调用何时调用其他方法。

2 个答案:

答案 0 :(得分:4)

此行为与simple_form无关。您没有为要调用的操作指定URL,也没有传递任何模型来推断其路径,因此您最终将使用空哈希调用的url_for()方法。此调用的结果是当前页面,显然与显示表单的路径相同,但使用POST作为HTML-verb。

要拨打sessions_path而不是new_session_path,您可以执行以下操作:

= simple_form_for :session, url: :sessions do |f|

通过url_for进行处理,它实际上与指定url: sessions_path相同,但却让魔术师不在你身边。

答案 1 :(得分:1)

我不使用haml我使用erb,但我怀疑工作相似。在erb中,您的表单需要调用一个操作,例如:

    form_for :session, :url => {:action => "create"} do |f|

这会调用会话控制器的create方法。所以我猜haml会是

    simple_form_for :session, :url => {:action => "create"} do |f|

希望这会有所帮助