Rails - 在db中添加数组

时间:2015-07-23 17:17:51

标签: ruby-on-rails arrays activerecord

我在一个名为"当前计划"的表中有一个名为"计划选择"的数组。我希望能够为这些数组添加其他值。

例如:如果数组当前是[" a"," b"," c"],我希望能够添加第四个元素," d",到阵列。

到目前为止,我已在当前​​计划控制器中创建了一个新操作:

def addplan
    p = CurrentPlan.find(12)
    p.plan_selection << "Test"
    p.save
    redirect_to:back
end 

然而,虽然代码没有中断,但除了将我重定向回同一页面之外,它根本不会做任何事情。

Started POST "/clients/1/quotes/36/current_plans/12/addplan" for 66.186.164.130 at 2015-07-23 17:03:43 +0000
Processing by CurrentPlansController#addplan as HTML
  Parameters: {"authenticity_token"=>"83OuJJLivjOCXgzoKkPnzqz8HBk=", "client_id"=>"1", "quote_id"=>"36", "current_plan_id"=>"12"}
  CurrentPlan Load (30.6ms)  SELECT  "current_plans".* FROM "current_plans"  WHERE "current_plans"."id" = $1 LIMIT 1  [["id", 12]]
   (30.5ms)  BEGIN
   (30.3ms)  COMMIT
Redirected to http://crossing-mmiller.c9.io/clients/1/quotes/36/current_plans/12/
Completed 302 Found in 240ms (ActiveRecord: 213.1ms)

路线:

resources :current_plans do
    collection { post :planselection }
    post :addplan
end

非常感谢任何帮助!

当前计划架构:

create_table "current_plans", force: true do |t|
    t.integer  "client_id"
    t.string   "client_name"
    t.string   "plan_name"
    t.integer  "plan_year"
    t.string   "classification"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "plan_number"
    t.date     "effective_date"
    t.string   "quote_name"
    t.string   "plan_selection", default: [], array: true
    t.integer  "quote_id"
    t.integer  "benefit_detail_id"
    t.float    "group_premium"
end

当前计划模型:

class CurrentPlan < ActiveRecord::Base
   belongs_to :quote
   belongs_to :client
end

2 个答案:

答案 0 :(得分:0)

问题是您使用的声明并未将该字段标记为脏,因此记录不会更新。这是Rails中序列化字段的已知问题。 解决方案使用不同的语法:

  

p.plan_selection = p.plan_selection.push(&#34; Test&#34;)

顺便说一下,表字段是一个数组,Rails已经通过读取模式了解了这一点,因此您不需要也不应该将其标记为模型中的序列化。

答案 1 :(得分:0)

@boulder是正确的,因为该字段没有被标记为脏,但结果起作用的解决方案是在推送&#34;测试&#34;之前添加此行p.plan_selection_will_change!。进入阵列。