我有visit
和condition_value
个型号,has_many though
与condition_visit
相关联。
此外,还有另外两个模型:condition_type
和condition_name
。所以基本上有几个条件,每个条件都有一个类型和几个值。创建访问时,用户为每个条件选择多个值。每种情况都有一个details
字段。
我省略了似乎无关紧要的代码部分。
class ConditionValue < ActiveRecord::Base
belongs_to :condition_name
has_many :visits
has_many :condition_visits, through: :visits
end
class ConditionVisit < ActiveRecord::Base
belongs_to :visit
belongs_to :condition_value
end
class Visit < ActiveRecord::Base
has_many :condition_values, through: :condition_visits
has_many :condition_visits, :dependent => :destroy
accepts_nested_attributes_for :condition_visits, :allow_destroy => true
end
控制器:
class VisitsController < ApplicationController
...
def new
@visit = Visit.new
@visit.condition_visits.build
end
...
private
# Use callbacks to share common setup or constraints between actions.
def set_visit
@visit = Visit.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def visit_params
params.require(:visit).permit( ... , condition_visits_attributes:
[:details, condition_value_id:[]])
end
end
视图:
<div class="field">
<% ConditionType.all.each do |type| %>
<% ConditionName.all.each do |v| %>
<% if ConditionName.find_by(:name => v.name, :condition_type_id => type.id) %>
<%= f.fields_for :condition_visits do |s| %>
<%= v.name %> <%= s.collection_select(:condition_value_id, ConditionName.find_by(:name => v.name, :condition_type_id => type.id).condition_values, :id, :name, {:include_hidden => false}, :multiple => true) %>
Details: <%= s.text_field :details %>
<% end %>
<% end %>
<br>
<% end %>
<hr>
<% end %>
记录将插入到数据库中,但只有details
和visit_id
字段condition_value_id
为NULL。
日志:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"eo9jxQqPk0UlPxAomDy4Njvf2+evVE/yySiaDFZMQM4Db5IvmTQ5fDK8wtxd5bTDMNfzfDBxXO+c+RdAXMjiMQ==",
"visit"=>{"condition_visits_attributes"=>{
"0"=>{"condition_value_id"=>["2", "3"], "details"=>"1"},
"1"=>{"condition_value_id"=>["13"], "details"=>"2"},
"2"=>{"details"=>""}, "3"=>{"details"=>""},
"4"=>{"details"=>""}, "5"=>{"details"=>""}, "6"=>{"details"=>""},
"7"=>{"details"=>""}, "8"=>{"details"=>""}, "9"=>{"details"=>""},
"10"=>{"details"=>""}, "11"=>{"details"=>""}, "12"=>{"details"=>""},
"13"=>{"details"=>""}, "14"=>{"details"=>""}, "15"=>{"details"=>""},
"16"=>{"details"=>""}, "17"=>{"details"=>""}, "18"=>{"details"=>""},
"19"=>{"details"=>""}, "20"=>{"details"=>""}, "21"=>{"details"=>""},
"22"=>{"details"=>""}, "23"=>{"details"=>""}, "24"=>{"details"=>""},
"25"=>{"details"=>""}, "26"=>{"details"=>""}, "27"=>{"details"=>""},
"28"=>{"details"=>""}, "29"=>{"details"=>""}}, ...,
"commit"=>"Create Visit", "doctor_id"=>"1", "patient_id"=>"14"}
....
SQL (0.2ms) INSERT INTO "condition_visits" ("details", "visit_id",
"created_at", "updated_at") VALUES (?, ?, ?, ?) [["details", "1"],
["visit_id", 236], ["created_at", "2016-03-22 13:20:46.254311"],
["updated_at", "2016-03-22 13:20:46.254311"]]
SQL (0.1ms) INSERT INTO "condition_visits" ("details", "visit_id",
"created_at", "updated_at") VALUES (?, ?, ?, ?) [["details", "2"],
["visit_id", 236], ["created_at", "2016-03-22 13:20:46.256021"],
["updated_at", "2016-03-22 13:20:46.256021"]]
SQL (0.1ms) INSERT INTO "condition_visits" ("details", "visit_id",
"created_at", "updated_at") VALUES (?, ?, ?, ?) [["details", ""],
["visit_id", 236], ["created_at", "2016-03-22 13:20:46.257165"],
["updated_at", "2016-03-22 13:20:46.257165"]]
...
我该如何解决这个问题?