Как исправить 'не работает перенаправление через Turbolinks' в Ruby on Rails с Vue.js - PullRequest
0 голосов
/ 14 января 2019

На моей странице входа не работает перенаправление Turbolinks.
Эта страница используется для входа в систему. После публикации правильной информации в форме браузер переходит на исходную страницу.

Я реализую страницу входа с Ruby on Rails и Vue.js.
При загрузке я использую Turbolinks, поэтому я сделал Vue.js плагин vue-turbolinks тоже.

Рельсы: 5.2.2
Рубин: 2.5.1
Турболинки: 5
vue-turbolinks: 2.0.4
веб-упаковщик: 3,5

user_controller.rb

# coding: utf-8
class UsersController < ApplicationController

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)
    if @user.save
      flash[:success] = "registing user data"
      redirect_to '/'
    else
      flash[:danger] = "invalid info"
      redirect_to '/signup'
    end
  end

  private
    def user_params
      params.require(:user).permit(:user_name, :email, :password, :password_confirmation)
    end

new.html.erb

<h1>Add</h1>
</div>
<%= javascript_pack_tag 'new' %>
<div>

new.vue

<template>
  <form accept-charset="UTF-8">
    <input type="text" v-model="username" placeholder="username">
    <input type="text" v-model="email" placeholder="email">
    <input type="password" v-model="password" placeholder="password">
    <input type="password" v-model="password_confirm" placeholder="password(confirm)">
    <button type="submit" v-on:click="sendForm">send</button>
  </form>
</template>

<script>
import axios from 'axios';

const token = document.getElementsByName("csrf-token")[0].getAttribute("content");
axios.defaults.headers.common["X-CSRF-Token"] = token;
axios.defaults.headers.common["Content-Type"] = "application/json";
axios.defaults.headers.common["charset"] = "utf-8";
axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";

export default {
  data: function() {
    return {
      username: "",
      email: "",
      password: "",
      password_confirm: ""
    }
  },
  methods: {
    sendForm: function(e){
      axios.post("/signup", {
        "user": {
          "user_name": this.username,
          "email": this.email,
          "password": this.password,
          "password_confirmation": this.password_confirm,
        }
      })
      .then(response => { 
      })
      .catch(response => {
      });
    }
  }
}
</script>

new.js

import Vue from 'vue';
import New from '../new.vue';
import TurbolinksAdapter from 'vue-turbolinks';

Vue.use(TurbolinksAdapter);

document.addEventListener('turbolinks:load', () => {
    const el = document.body.appendChild(document.createElement('new'));
    const new_ = new Vue({
        el,
        render: h => h(New)
    });

    console.log('/new page');
});

Я ожидаю, что после загрузки браузер перейдет на корневую страницу в правильном регистре.

...