js erb 内的 Rails 会话为空
Rails session inside js erb empty
我想在js模板中使用session[:path]
,但它是空的
我已经定义了session[:path]='my path'
然后想像 JS 一样放入
window.location.href='<%= session[:path]%>';
但返回<%= p session[:path] => nil%>
控制器
class SessionsController < Devise::SessionsController
respond_to :js
layout false
def create
self.resource = warden.authenticate(auth_options)
if resource && resource.active_for_authentication?
sign_in(resource_name, resource)
end
end
def path
user = User.find_by(email:params[:email])
conversation = Conversation.find_by(product_id:params[:product_id],recipient_id:params[:product_owner_id])
# binding.pry
p params
if conversation
session[:path] = conversation_url(conversation.id)
p 'conv'
elsif params[:product_owner_id].to_i == user.id
session[:path] = request.referer
p 'back'
else
conversation = Conversation.create(sender_id:user.id, recipient_id:params[:product_owner_id],product_id:params[:product_id])
session[:path] = conversation_url(conversation.id)
p 'new'
end
render json: :ok
end
end
JavaScript 模板/sessions/create.js.erb
<% if user_signed_in?%>
window.location='<%= session[:path] %>';
<% else %>
$('#login_popup input').parent().addClass('inputbox_error');
$('#log_error_messages').show();
$('input').keydown(function(){
$(this).parent().removeClass('inputbox_error')
$('#log_error_messages').hide();
})
<% end %>
你应该在你的path.js.erb
文件中有session[:path]
。
如果你想在你的js文件中使用一些ruby变量(如application.js),我会推荐gon gem
听起来您在app/views/sessions/path.js.erb
中使用session[:path]
(而不是在app/assets/javascript
的文件中)?如果是这样,那么您就走在正确的轨道上。
你说<%= p session[:path] %>
什么都不"回报"。没错,因为p
的返回值是 nil
。它打印你给它的东西,但它不返回任何东西。
我怀疑你的文件实际上正在渲染正确的Javascript,但什么也没发生,因为你应该说window.location = ...
不是window.location.href = ...
。
编辑:顺便说一下,通常人们只有在以后的请求中再次需要时才将东西存储在session
中。如果您只是尝试将变量传递给 JS 视图,您知道您可以使用实例变量,对吗?像这样:@redirect_path = conversation_url(conversation.id)
.
相关文章:
- 如何从rails中的代码中删除新行( )
- Rails File_field最大堆栈大小
- angularjs+rails应用程序中未显示模板
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- Rails 3.2 js.erb文件转义js
- Rails-JQueryUIAutcomplete和AJAX不工作,可以't连接到数据库
- Jquery:代码在rails中的页面加载时未执行
- Flash Uploadify在调用我的MVC控制器时没有保留会话/授权
- Rails操作只调用一次,但我在ajax中每秒钟都调用一次
- Rails/Javascript链接到用于切换多个元素的函数
- 在Rails中更新Div,而不更改更新请求后的视图
- js erb 内的 Rails 会话为空
- 如何在Ruby on Rails会话过期时重新加载或刷新页面
- 从主干视图访问 Rails 会话变量
- Jquery移动导航栏在会话登录后未激活(Rails)
- 在会话中传递所选国家(下拉)的值,然后重新加载当前页面(Rails 4)
- 在Ruby on Rails中设置一个Javascript会话
- Rails -使用AJAX用link_to设置会话变量
- 我如何设置一个会话变量从js在haml在ruby on rails
- Rails:用于跟踪会话不一致触发的Javascript