将数组传递给 hidden_field_tag 转换为字符串

Passing array into hidden_field_tag converted to string

我试图在表单中传递 hidden_field_tag 中的哈希数组,但我得到的是一个字符串。中间件或服务器或介于两者之间的东西正在将散列更改为字符串。在发送到控制器之前,数组在分配给字段之前已经变成了字符串。

  = hidden_field_tag :cities, @cities
  = hidden_field_tag :longitude, params[:longitude]
  = hidden_field_tag :address, params[:address]
  = hidden_field_tag :category, params[:category]
  = hidden_field_tag :city, @city
  = hidden_field_tag :state, @state
  = hidden_field_tag :category, @category
  = hidden_field_tag :user_id, @user.id

在一位资深同事的帮助下,我已经设法解决了这个问题:

  1. 在 html/slim 文件中:
     = hidden_field_tag :cities, @cities.map {|city| city.as_json}.to_json
  1. 控制器中的设置:
     cities = params[:cities].is_a?(String) ? JSON.parse(params[:cities]) : params[:cities]
     cities.map { |city| city.with_indifferent_access }

如果这种方法正确,我仍在寻找建议,并且非常想知道是否有更好的方法。