我需要将一个javascript变量播种到控制器。例如,如果视图中的代码如下 -
... <script type="text/javascript">
variable_test = 'hello'
</script>
...
我需要控制器来获取variable_test,比如 -
def hello
@variable_test = #Some code
# @variable_test => 'hello'
end
视图当然是问好,而“某些代码”是我不知道该怎么做。
答案 0 :(得分:3)
除非您进行某种类型的获取或发布,否则无法将客户端代码发送到控制器。尝试使用jQuery的post或get方法。如果您不使用jQuery,那么您可以执行以下操作:
var variable_test = 'hello';
var el = document.createElement('script');
el.setAttribute('src', 'path_to_controller' + '?variable_test=' + variable_test);
document.body.appendChild(el);
然后在你的控制器中你会这样做:
@varliable_test = params[:varliable_test]
语法可能有些偏差,但你会得到一般的想法。
答案 1 :(得分:1)
首先,你需要以某种方式调用控制器。数据是在表单中,您提交表单,或者您从JavaScript进行AJAX调用。在第一种情况下,您希望使用javascript向表单添加隐藏的输入,其中包含您想要的名称和值。在第二种情况下,使用AJAX请求发送的数据需要包含所需的名称 - 值对。如果不了解你正在做的事情,我就无法更具体;你在提交表格或使用AJAX吗?如果你正在使用AJAX,你使用的是javascript库,或者使用任何内置的Rails助手进行ajax(例如remote_function)。
无论哪种方式,您都希望最终得到一个包含名称 - 值对“varliable_test = hello”的请求。那你就做了
@varliable_test = params[:varliable_test]
访问控制器中的值。
(我还要注意,也许你的意思是“变量”,而不是“变量”,但显然只要你保持一致就不会影响功能。)
答案 2 :(得分:0)
我也在寻找这个问题的答案。在我的某个应用中,我需要从Google的地方自动填充中获取数据。这种方法对我来说似乎是一个完美的解决方案(归功于Thaha kp:How to pass a javascript variable into a erb code in a js view?)
查看:
<script type="text/javascript">
var variable_test = 'hello';
$(document).ready(function() {
$('#model_variable_test').val(variable_test);
});
</script>
...
<%= form_for :model do |f| %>
...
<%= f.hidden_field :variable_test %>
...
<% end %>
控制器:
def hello
@variable_test = params[:model][:variable_test]
end