[英]Rails - passing a JSON from a view into a controller
在我的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还是很陌生,所以对如何解决此问题有任何见解。
什么是最好的方法
a)将JSON数组传递给控制器,
该数组是根据其他视图之一中的用户输入创建的,
为什么不将该表单提交给目标操作,然后使用ruby将数据组装成一个数组? 如果不是这样,则可以使用javascript将ajax请求发送到Rails应用。 在这里,它使用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代替:
该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)在控制器中解析数组,以便执行诸如获取数组长度的操作
Ruby有一个标准的库模块,用于将JSON文本转换为ruby哈希,以便您可以轻松地检索数据:
http://ruby-doc.org/stdlib-2.3.1/libdoc/json/rdoc/JSON.html#method-c-5B-5D
但是,在Rails应用程序中,您甚至不需要编写任何代码即可将JSON文本转换为哈希值:在jquery ajax请求中,如果将contentType
指定为"application/json"
,则Rails会自动将JSON转换将请求中的文本转换为散列,可在params
:
{"my_array"=>[1, 2, 3], "controller"=>"dogs", "action"=>"dostuff", "dog"=>{}}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.