在我的Rails应用程序中,我想将Javscript数组传递给new
动作控制器 - 该数组是从其他视图中的用户输入创建的,由JSON组成。什么是最好的方法:a)将JSON数组传递给控制器,b)解析控制器中的数组,以便我可以做一些事情,比如获取数组长度,将JSON渲染到new
视图中,等?
正如我已经构建它,该应用程序工作正常,但我可以看到,我做事情的方式将导致问题,因为我继续开发它。
目前,我的动作控制器如下所示:
def new
x = Integer(params[:total_inserts_param])
@report_group = Array.new
x.times do
@report_group.push(Report.new)
end
end
其中total_inserts_param
是在前面的视图中计算并通过URL传入的数组长度的计数,而JSON的实际内容是通过字符串化的localStorage对象在视图之间传递的;解析出这些对象的内容,并将其插入到控制器生成的new
视图中的可变数量的表单输入字段中。这当然是传递Rails应用程序数据的一种方法,但我很确定这不是一个很好的方法!
我更愿意将数组放入控制器,为数组中的每个JSON生成Report.new
,然后使用JSON的属性填充控制器创建的输入字段。
我对Rails相当陌生,因此非常感谢任何有关如何处理此问题的见解。
答案 0 :(得分:0)
的最佳方法是什么?
a)将JSON数组传递给控制器,
该数组是从其他一个视图中的用户输入创建的,
为什么不将该表单提交给目标操作,然后使用ruby将数据组合成数组?如果这不是一个选项,您可以使用javascript向rails应用程序发送ajax请求。这里是使用coffeescript和jquery:
window.my_func = () -> #`window` is needed if you call the function from another file
array = [1, 2, 3]
text = JSON.stringify { my_array: array }
ajax_settings =
type: "post",
url: 'http://localhost:3000/dogs/dostuff',
data: text,
contentType: "application/json",
success: (response) ->
$("#result").html(response)
$.ajax(ajax_settings)
当你编写jquery代码时,有很多讨厌的大括号和括号,你应该考虑使用coffeescript:
coffee script syntax
coffee script syntax and jquery
coffeescript会在你的app / assets / javascript / controller_name.js.coffee文件中找到,该文件在创建控制器时由rails自动创建。在我的例子中,我使用了名为DogsController的控制器,因此coffeescript文件是app / assets / javascript / dogs.js.coffee。
然后,在application.html.erb
布局中,您将包含rails从所有单个js文件创建的一个大缩小js文件,如下所示:
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Restauranteur</title>
<%= stylesheet_link_tag "application", media: "all" %>
<%= javascript_include_tag "application" %> <**** HERE *****
<%= csrf_meta_tags %>
</head>
<body>
<p class="notice"><%= notice %></p>
<p class="alert"><%= alert %></p>
<div>Application Layout</div>
<div>
<%= yield %>
</div>
<%= debug params %>
<%= debug session[:allowed] %>
</body>
</html>
要在您的某个观看中致电my_func()
,您只需要写:
<script>
my_func();
</script>
b)解析控制器中的数组,以便我可以执行get等操作 数组长度
Ruby有一个标准的库模块,用于将JSON文本转换为ruby哈希,以便您可以轻松地检索数据:
http://ruby-doc.org/stdlib-2.3.1/libdoc/json/rdoc/JSON.html#method-c-5B-5D
然而,在你的rails应用程序中,你甚至不需要编写任何代码来将JSON文本转换为哈希:如果你指定contentType
为"application/json"
,则在你的jquery ajax请求中然后rails会自动将请求中的JSON文本转换为哈希,这将在params
中提供:
{"my_array"=>[1, 2, 3], "controller"=>"dogs", "action"=>"dostuff", "dog"=>{}}