我在一个名为"当前计划"的表中有一个名为"计划选择"的数组。我希望能够为这些数组添加其他值。
例如:如果数组当前是[" 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
答案 0 :(得分:0)
问题是您使用的声明并未将该字段标记为脏,因此记录不会更新。这是Rails中序列化字段的已知问题。 解决方案使用不同的语法:
p.plan_selection = p.plan_selection.push(&#34; Test&#34;)
顺便说一下,表字段是一个数组,Rails已经通过读取模式了解了这一点,因此您不需要也不应该将其标记为模型中的序列化。
答案 1 :(得分:0)
@boulder是正确的,因为该字段没有被标记为脏,但结果起作用的解决方案是在推送&#34;测试&#34;之前添加此行p.plan_selection_will_change!
。进入阵列。