Как заменить встроенный JavaScript в рельсах контроллера - PullRequest
0 голосов
/ 13 июня 2018

Мой существующий session_controller использует встроенный выход javascript в root_path следующим образом:

render inline: "<script>window.location.replace('#{url}')</script>"

Он работал в Rails 4, но не в Rails 5. В большинстве документов говорится о вызове javascript в представлении.Но это контроллер.Из того, что я понимаю, я должен заменить на

render :js => "myNewJavascriptFunction();"

, который я пытался создать myNewJavascriptFunction () в другом файле, например: views / session / create.js.erb, в котором есть ошибка

неопределенный метод `myNewJavascriptFunction 'для

Справка:

  1. Как или как поместить javascript в views / session / create.js.erb
  2. Можем ли мы поместить javascript в ресурсы для работы с контроллером и как.

Вот мои существующие коды: В SessionsController

  def create
    auth = request.env["omniauth.auth"]
    user = User.from_omniauth(auth)
    session[:user_id] = user.id
    if params.permit[:remember_me]
      cookies.permanent[:auth_token] = user.auth_token
    else
      cookies[:auth_token] = user.auth_token
    end
        # render :js => refresh(root_path) #not work
        # redirect_to root_path            #not work with JQM
        render inline: "<script>window.location.replace('#{url}')</script>" #not work with Rails 5
    rescue 

    render inline: "<script>window.location.replace('#{url}')</script>" #not work with Rails 5
  end

views / session / create.js.erb

function refresh(url='/') {
  window.location.replace(\'#{url}\');
}

вызов по меню

- if login?
  %li
    %a{"data-panel" => "main", :href => logout_path, "data-ajax"=>"false"} Sign Out
- else
  %li
    %a{:href=>new_session_path, "data-panel" => "main"} Sign In
  %li
    %a{:href=>new_identity_path, "data-panel" => "main"} Sign Up
%li
  = link_to "Refresh", "#", :onclick=>"window.location.replace('/')"
- if !login?    
  = link_to image_tag( 'facebook-sign-in-button.png'), '/auth/facebook', rel: "external"  

1 Ответ

0 голосов
/ 13 июня 2018

Нет необходимости иметь views / session / create.js.erb

Просто замените render inline: "<script>window.location.replace('#{url}')</script>" на render js: "window.location.replace('#{url}')"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...