簡體   English   中英

Rails-將JSON從視圖傳遞到控制器

[英]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代替:

咖啡腳本語法
咖啡腳本語法和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)在控制器中解析數組,以便執行諸如獲取數組長度的操作

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM