我有一个带有 remote:true
选项的函数。
def get_user_info
...
respond_to do |format|
if !response.nil?
r = response.to_hash
@data = {:IsLoggedIn => true, :ErrorMessage => "", :response => r }
else
error = "There is an error occurred."
@data = {:IsLoggedIn => false, :ErrorMessage => error, :response => "" }
end
format.js { render :json => @data }
format.html
end
end
然后我有我的get_user_info.js.erb
,我想访问其中的ErrorMessage。
我一直在尝试,但即使 console.log('try')
也不起作用。
我的目标是将错误消息或 r(响应)附加到正文。但无法访问@data
变量。
最佳答案
完成您想做的事情需要三个步骤(我猜)。
首先:将 Controller 中的数据设置为您想要发送和接收的数据,然后在 View 中:
# _controller.rb
def method_name
if !response.nil?
r = response.to_hash
@data = {:IsLoggedIn => true, :ErrorMessage => "", :response => r }
# response = response.to_hash
# @data = {is_logged_in: true, error_message: '', response: response }
else
error = "Russia terrorist state"
@data = {:IsLoggedIn => false, :ErrorMessage => error, :response => "" }
end
format.js
format.html
end
第二:创建js.erb
文件,以便接收 Controller 中方法发送的数据:
# method_name.js.erb
console.log("<%= escape_javascript(@data[:ErrorMessage]) %>")
在这里,您只需在控制台中打印您收到的内容即可测试是否成功。
第三:使用 AJAX
触发函数以获取 View 中的数据:
# method_name.html.erb
<script>
$.ajax({
type: 'GET',
url: '/<method_name>',
dataType: 'script'
});
</script>
顺便提一下:
当你的散列键是符号时,为什么不使用散列文字语法?,如此处所述 https://github.com/bbatsov/ruby-style-guide#hash-literals
为什么不使用更具表现力的方式来命名变量呢?正如这里提到的http://www.itiseezee.com/?p=83
关于javascript - rails |如何访问 js.erb 文件中的哈希值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42786532/