首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails和Hotwire格式的错误

Rails和Hotwire格式的错误
EN

Stack Overflow用户
提问于 2021-08-17 21:49:06
回答 3查看 1.8K关注 0票数 4

我是运行rails 6.1与热轮胎。我正在创建一个登录表单,接收电子邮件和密码,然后重定向到store_index路径。但是,我遇到了这个错误--错误:表单响应必须重定向到另一个位置。我试过以下几种方法但也犯了同样的错误,

  1. 使用format.html { redirect_to store_index_path}
  2. 我注释掉了create函数中的所有内容,并添加了puts "Hello“。然而,我还是得到了同样的错误。

我现在很困惑,有什么帮助吗

代码语言:javascript
复制
  <%= form_with url: retailer_log_in_path, class: 'box'  do |f| %>
    <div class="field">
        <%= f.label 'email:', class: "label"%><br>
        <%= f.text_field :email, class: "input" %>
    </div>
    <div class="field">
        <%= f.label 'password:' ,class: "label"%><br>
        <%= f.password_field :password, class: "input" %>
    </div>
    <div class="field">
        <%= f.submit 'Log In', class: "input" %>
    </div>
  <% end %>

会话controller.rb

代码语言:javascript
复制
def create
        retailer = Retailer.find_by(email: params[:email])
        if retailer.present? && retailer.authenticate(params[:password])
            session[:retailer_id] = retailer.id 
            redirect_to store_index_path
        else
            flash.now[:alert] = 'Invalid email or password'
            render :new
        end
    end
EN

回答 3

Stack Overflow用户

发布于 2021-08-31 15:51:29

如果要使用turbo驱动器表单提交,则必须从控制器返回4xx或5xx响应代码,以进行验证错误:

例如

代码语言:javascript
复制
render :new, status: :unprocessable_entity

在您的代码中,应该如下所示:

代码语言:javascript
复制
    def create
        retailer = Retailer.find_by(email: params[:email])
        if retailer.present? && retailer.authenticate(params[:password])
            session[:retailer_id] = retailer.id 
            redirect_to store_index_path
        else
            flash.now[:alert] = 'Invalid email or password'
            render :new, status: :unprocessable_entity
        end
    end

您可以在Turbo文档https://turbo.hotwired.dev/handbook/drive#redirecting-after-a-form-submission中找到更多信息。

票数 7
EN

Stack Overflow用户

发布于 2021-08-17 22:44:27

我认为您没有使用turbo_frame_tag来包装表单。

代码语言:javascript
复制
<%= turbo_frame_tag "post" do %>
  <%= render 'form', post: @post %>
<% end %>
票数 0
EN

Stack Overflow用户

发布于 2021-08-18 00:37:43

如果您希望您的表单像以前一样工作,请将local: true添加到表单声明中。换句话说,将表单声明更改为:

代码语言:javascript
复制
form_with url: retailer_log_in_path, class: 'box'

对此:

代码语言:javascript
复制
form_with url: retailer_log_in_path, class: 'box', local: true  

根据Rails表单助手文档form_with默认使用参数remote: true。这会激活表单上的Javascript,错误是因为Javascript期望有一个特定的(异步)响应;如果将local: true添加到form_with声明中,表单提交将不是异步的,错误应该消失。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68824400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档