1

这是我第一次序列化。我在客户端用 jQuery 序列化了一组复选框,将其放入隐藏元素中,然后提交表单。现在在服务器端,我想反序列化为我可以使用的数组。这是我在客户端的字符串。

 someArray%5B%5D=value0&someArray%5B%5D=value1

在 Rails 3 中,我想得到一个如下所示的数组:

["value0", "value1"]

谢谢!

4

2 回答 2

2

如果您将这些值作为典型的 post 参数提交给您的请求,Rack 将自动解析这些值。例如:

curl http://yoursite.com -d "array[]=somevalue&array[]=othervalue"

然后,这将params[:array]在您的应用程序中可用,包含两个具有指定值的元素。

于 2012-07-17T01:42:47.540 回答
0

对于序列化,我想出了一些东西,并且我已经在生产中工作了一段时间。假设我有一个带有 3 种不同类型小工具的汽车模型。(假设我不想要数据库中的 3 个字段):

在您的数据库中必须是一个名为 gadgets as TEXT 的字段(这非常重要)

在碳水化合物.rb

serialize :gadgets
attr_accessible :alarm, :ac, :tires
ALARM = 0;
AC = 1;
TIRES = 2;

# this is the getter for alarm
def has_alarm
  if self.gadgets.nil?
    return 0
  else
    if self.gadgets[ALARM].nil?
      return 0
    else
      return self.gadgets[ALARM]
    end
end

# this is the setter for alarm
def has_alarm=(value)
  self.gadgets = Array.new if self.gadgets.nil?
  self.gadgets[ALARM] = value
end

# getter 
def has_ac
  if self.gadgets.nil?
    return 0
  else
    if self.gadgets[AC].nil?
      return 0
    else
      return self.gadgets[AC]
    end
end

# setter
def has_ac=(value)
  self.gadgets = Array.new if self.gadgets.nil?
  self.gadgets[AC] = value
end

...

在你的 _form.rb

<%= f.check_box :has_alarm %> I want alarm in my car
<%= f.check_box :has_ac %> I want AC in my car
<%= f.check_box :has_tires %> I want deluxe tires in my car

我希望您以后不必搜索这些字段...

于 2012-07-17T03:39:03.090 回答