3

ホットワイヤーでRails 6.1を実行しています。ログインフォームを作成して、電子メールとパスワードを受け取り、store_index パスにリダイレクトします。ただし、このエラーが発生しています - エラー: フォームの応答は別の場所にリダイレクトする必要があります。次のことを試しましたが、同じエラーが発生しました。

  1. 使用する format.html { redirect_to store_index_path}

  2. create 関数内のすべてをコメントアウトし、puts "Hello" を追加しました。しかし、私はまだ同じエラーが発生しました。

私は今混乱しています、助けてください

  <%= 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 %>

セッションコントローラー.rb

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
4

3 に答える 3

0

フォームを Hotwire 以前と同じように機能させたい場合はlocal: true、フォーム宣言に追加します。つまり、フォーム宣言を次のように変更します。

form_with url: retailer_log_in_path, class: 'box'

これに:

form_with url: retailer_log_in_path, class: 'box', local: true  

Rails form helper docsによると、form_withデフォルトではパラメータを使用しますremote: true。これにより、フォームで Javascript がアクティブになります。エラーは、Javascript が特定の (非同期) 応答を予期しているためです。宣言に追加local: trueするとform_with、フォームの送信は非同期にならず、エラーは解消されます。

于 2021-08-18T00:37:43.207 に答える