【问题标题】:Rails form_for wrong controller actionRails form_for 错误的控制器动作
【发布时间】:2014-06-17 16:54:21
【问题描述】:

Rails 教程。我无法获取登录表单来调用 create 方法。调试显示它只调用新操作。我在设置也有数据库的用户时没有问题,因此使用了以下内容:

<%= form_for @user do |f| %>

在这种情况下,没有模型,我按照教程的建议进行操作:

<%= form_for(:session, url: sessions_path) do |f| %> 

快速浏览 rake 路线表明该路线是有效的:

Prefix Verb      URI Pattern                 Controller#Action                                                                                                                                                                                   
   root GET      /                           site_pages#root                                                                                                                                                                                     
  about GET      /about(.:format)            site_pages#about                                                                                                                                                                                    
 signup GET      /signup(.:format)           users#new                                                                                                                                                                                           
signout DELETE   /signout(.:format)          sessions#destroy                                                                                                                                                                                    
 signin GET      /signin(.:format)           sessions#new                                                                                                                                                                                        
  users POST     /users(.:format)            users#create                                                                                                                                                                                        
new_user GET     /users/new(.:format)        users#new                                                                                                                                                                                           
user GET         /users/:id(.:format)        users#show                                                                                                                                                                                          
        DELETE   /users/:id(.:format)        users#destroy                                                                                                                                                                                       
sessions POST    /sessions(.:format)         sessions#create                                                                                                                                                                                     
new_session GET  /sessions/new(.:format)     sessions#new                                                                                                                                                                                        
session DELETE   /sessions/:id(.:format)     sessions#destroy   

不知道我错过了什么。折腾了一个多小时。尝试更改为 form_tag 并且它仍然以相同的方式做出反应。我已经以多种方式编辑了路线和表格,以触发正确的功能,但没有运气。

我错过了什么?谢谢。

添加了控制器:

def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
        #SIGN IN AND REDIRECT
    else
        flash.now[:danger] = "Invalid Submission. Please Try Again."
        render 'new'
    end
end

【问题讨论】:

  • 将其视为 Rails 未解之谜。我将: 更改为: 并且成功了。然后我把它改回来,它仍然有效。我不知道。
  • 您始终可以明确发布方法::发布到您的 form_for 以不调用 get 方法:form_for(:session, url: sessions_path, method: :post)
  • 为什么不使用 Devise gem?
  • 迈克尔很快就到了。

标签: ruby-on-rails forms routes railstutorial.org


【解决方案1】:
<div class="form-horizontal" role="form">
      <%= form_for(:session, url: sessions_path) do |f| %> 

            <%= render 'layouts/flash' %> 

            <%= f.label :email %>
            <%= f.text_field :email %>

            <%= f.label :password %>
            <%= f.password_field :password %>

            <%= f.submit "Log In", class: "btn btn-primary btn-width-30" %>

       <% end %>
</div>

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 1970-01-01
    • 2011-08-30
    相关资源
    最近更新 更多