从Rails控制器调用Javascript函数
我有一个应用程序,您可以从application.html.erb中的标题登录和注销。signin表单(或signout链接)分别调用用户#signin或用户#signout操作。两个操作都会调用重定向到根路径。那部分有效 我想要的是动态更新标题,而不是刷新页面(即删除重定向到)。我想通过javascript/jquery(但不是咖啡)实现这一点。文件views/users/signIn.js包含三个函数:一个用于用户登录,一个用于管理员登录,另一个用于用户/管理员注销 我在互联网上搜遍了,但我找不到答案。简而言之,在我登录(或注销)一个用户或管理员之后,我想从signin.js(或signin.js.erb,我对此感到困惑)中包含的users_controller.rb调用一个javascript/jquery函数 我的代码如下。多谢各位 用户\u controller.rb从Rails控制器调用Javascript函数,javascript,jquery,ruby-on-rails,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails,Ruby On Rails 4,我有一个应用程序,您可以从application.html.erb中的标题登录和注销。signin表单(或signout链接)分别调用用户#signin或用户#signout操作。两个操作都会调用重定向到根路径。那部分有效 我想要的是动态更新标题,而不是刷新页面(即删除重定向到)。我想通过javascript/jquery(但不是咖啡)实现这一点。文件views/users/signIn.js包含三个函数:一个用于用户登录,一个用于管理员登录,另一个用于用户/管理员注销 我在互联网上搜遍了,但我
class UsersController < ApplicationController
include UsersHelper
include AdminsHelper
before_action :correctUser, only: [:edit, :update, :destroy]
...
def signIn
user = User.find_by(email: params[:user][:email].downcase)
if user && user.authenticate(params[:user][:password])
signInUser user
render js: "sUser();" #Call to javascript function
else
admin = Admin.find_by(email: params[:user][:email].downcase)
if admin && admin.authenticate(params[:user][:password])
signInAdmin admin
render js: "sAdmin();" #call to js function
else
flash[:error] = "Invalid email or password"
redirect_to root_path
end
end
end
def signout
#works for both users and admins
signOutUser
render js: "signoutAll();" # call to js function
end
private
def correctUser
redirect_to root_path unless User.find(params[:id]) == currentUser || adminSignedIn?
end
def userParams
params.require(:user).permit(:name, :email,
:password, :password_confirmation)
end
def signInUser(user)
rememberToken = User.newRememberToken
cookies[:remember_token] = rememberToken
#change to cookies.permanent to make cookie stay after browser close
user.update_attribute(:remember_token, User.digest(rememberToken))
end
def signInAdmin(admin)
rememberToken = Admin.newRememberToken
cookies[:remember_token] = rememberToken
#change to cookies.permanent to make cookie stay after browser close
admin.update_attribute(:remember_token, Admin.digest(rememberToken))
end
def signOutUser
#Works for both users and admins
cookies.delete(:remember_token)
end
end
class UsersController
视图/用户/signIn.js
function sAdmin() {
$("#signin").html("Signed in as Admin \
<%= escape_javascript(link_to currentAdmin.name, currentAdmin)%>. \
<%= escape_javascript(link_to "Sign Out", signout_path)%>");
}
function sUser(){
$("#signin").html("Signed in as User \
<%= escape_javascript(link_to currentUser.name, currentUser)%>. \
<%= escape_javascript(link_to "Sign Out", signout_path)%>");
}
function signoutAll(){
$("#signin").html("blah <%= render 'static_pages/form' %>");
}
函数sAdmin(){
$(“#sign”).html(“以管理员身份登录\
. \
");
}
函数sUser(){
$(“#登录”).html(“以用户身份登录\
. \
");
}
函数signoutAll(){
$(“#sign”).html(“废话”);
}
如果您的方式不对,您应该让javascript在控制器中调用一个操作,让用户注销或登录。然后在js中执行必要的操作。@Iceman好的,我已经从javascript启动了登录/退出功能。但是,当添加一些rails代码(即“”)时,它只显示为纯文本。这是因为javascript位于.js文件而不是.js.erb文件中吗?如果是这样,我将把这个.js.erb文件放在哪里?谢谢。好的,我解决了这个问题。我仍然无法直接调用函数,所以仍然有点令人沮丧。