[英]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.