has_many :通过不从表单插入数据库
has_many :throught not INSTERING INTO database from form
我已经尝试了类似问题的所有解决方案,但还没有弄明白这个。
我在 'Clinician' 和 'Patient' 之间有一个 has_many :through 关系,并且有一个联合模型 'CareGroupAssignment'。我希望 patient
能够关联多个 clinicians
,而 clinicians
将关联多个 patients
.
当我提交表单时,记录如下:
Started POST "/patients" for 127.0.0.1 at 2015-09-02 14:56:38 -0700
Processing by PatientsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXX=", "patient"=>{"user_attributes"=>{"email"=>"allencentre", "password"=>"[FILTERED]"}, "first_name"=>"Allen", "last_name"=>"Centre", "birth_date(1i)"=>"2002", "birth_date(2i)"=>"9", "birth_date(3i)"=>"2", "clinician_ids"=>["85", "87"], "patient_deceased"=>"0", "patient_archived"=>"0"}, "button"=>""}
所以 "clinician_ids"=>["85", "87"]
是从表单传递的。
有一个 INSERT INTO "users" ("email", ....
和一个 INSERT INTO "patients" ("bir....
,但是 care_group_assignments
的数据没有。
有[36mCareGroupAssignment Load (0.4ms)[0m [1mSELECT "care_group_assignments".* FROM "care_group_assignments" WHERE "care_group_assignments"."patient_id" = [0m [["patient_id", 199]]
clinician.rb(简体)
class Clinician < ActiveRecord::Base
belongs_to :care_group
has_many :patients ,:through=> :care_group_assignments
has_many :care_group_assignments, :dependent => :destroy
belongs_to :user
accepts_nested_attributes_for :user, :allow_destroy => true
end
patient.rb
class Patient < ActiveRecord::Base
belongs_to :care_group
has_many :clinicians ,:through=> :care_group_assignments
has_many :care_group_assignments
belongs_to :user
accepts_nested_attributes_for :user, :allow_destroy => true
end
care_group_assignments.rb
class CareGroupAssignment < ActiveRecord::Base
belongs_to :clinician
belongs_to :patient
end
这是在遵循 Railscasts PRO #17- HABTM Checkboxes 中的示例,至少开始收集数据并正确设置模型。下面是每个临床医生的复选框,如 RailsCast 中所述,复选框显示并且数据已发送但未存储(无法弄清楚原因)。
患者new.html.erb表格
<%= form_for @patient do |form| %>
<%= form.fields_for :user do |builder| %>
<div class="form-group">
<%= builder.label "Email or Username" %>
<%= builder.text_field :email, class: "form-control" %>
</div>
<div class="form-group">
<%= builder.label :password %>
<%= builder.password_field :password, class: "form-control" %>
</div>
<% end %>
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: "form-control", placeholder: "First name" %>
</div>
<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: "form-control", placeholder: "Last name" %>
</div>
<div class="form-group">
<% Clinician.where(care_group_id: @care_group.id).each do |clinician| %>
<%= check_box_tag "patient[clinician_ids][]", clinician.id, @patient.clinician_ids.include?(clinician.id), id: dom_id(clinician) %>
<%= label_tag dom_id(clinician), clinician.full_name %><br>
<% end %>
</div>
<%= form.button 'Create Patient', class: "btn btn-u btn-success" %>
<% end %>
此方法目前无法保存 clinician
到 patient
关联。
patient_controller.rb
def new
@patient = Patient.new
@user = User.new
@patient.build_user
@care_group = current_clinician.care_group
end
def create
@patient = Patient.create(patient_params)
@patient.care_group = current_clinician.care_group
if @patient.save
redirect_to patient_path(@patient), notice: "New patient created!"
else
render "new"
end
end
def show
@patient = Patient.find_by(id: params["id"])
end
private
def patient_params
params.require(:patient).permit({:clinician_ids => [:id]},:first_name,:last_name,:user_id,:birth_date, user_attributes: [ :email, :password, :patient_id, :clinician_id ])
end
我计划在患者 show
页面上显示与 patient
关联的 clinicians
:
患者show.html.erb
<strong>Shared with:</strong>
<% @patient.clinicians.each do |clinician| %>
<%= clinician.full_name %><
<% end %>
如果我为数据库做种,这会起作用,但由于数据似乎没有存储,所以没有显示任何内容。
Rails 4.1.8,ruby 2.2.1p85,PostgreSQL
谢谢
我认为您的问题出在控制器中的这一行:
params.require(:patient).permit({:clinician_ids => [:id]}...
应该是:
params.require(:patient).permit({:clinician_ids => []}...
我已经尝试了类似问题的所有解决方案,但还没有弄明白这个。
我在 'Clinician' 和 'Patient' 之间有一个 has_many :through 关系,并且有一个联合模型 'CareGroupAssignment'。我希望 patient
能够关联多个 clinicians
,而 clinicians
将关联多个 patients
.
当我提交表单时,记录如下:
Started POST "/patients" for 127.0.0.1 at 2015-09-02 14:56:38 -0700
Processing by PatientsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"XXX=", "patient"=>{"user_attributes"=>{"email"=>"allencentre", "password"=>"[FILTERED]"}, "first_name"=>"Allen", "last_name"=>"Centre", "birth_date(1i)"=>"2002", "birth_date(2i)"=>"9", "birth_date(3i)"=>"2", "clinician_ids"=>["85", "87"], "patient_deceased"=>"0", "patient_archived"=>"0"}, "button"=>""}
所以 "clinician_ids"=>["85", "87"]
是从表单传递的。
有一个 INSERT INTO "users" ("email", ....
和一个 INSERT INTO "patients" ("bir....
,但是 care_group_assignments
的数据没有。
有[36mCareGroupAssignment Load (0.4ms)[0m [1mSELECT "care_group_assignments".* FROM "care_group_assignments" WHERE "care_group_assignments"."patient_id" = [0m [["patient_id", 199]]
clinician.rb(简体)
class Clinician < ActiveRecord::Base
belongs_to :care_group
has_many :patients ,:through=> :care_group_assignments
has_many :care_group_assignments, :dependent => :destroy
belongs_to :user
accepts_nested_attributes_for :user, :allow_destroy => true
end
patient.rb
class Patient < ActiveRecord::Base
belongs_to :care_group
has_many :clinicians ,:through=> :care_group_assignments
has_many :care_group_assignments
belongs_to :user
accepts_nested_attributes_for :user, :allow_destroy => true
end
care_group_assignments.rb
class CareGroupAssignment < ActiveRecord::Base
belongs_to :clinician
belongs_to :patient
end
这是在遵循 Railscasts PRO #17- HABTM Checkboxes 中的示例,至少开始收集数据并正确设置模型。下面是每个临床医生的复选框,如 RailsCast 中所述,复选框显示并且数据已发送但未存储(无法弄清楚原因)。
患者new.html.erb表格
<%= form_for @patient do |form| %>
<%= form.fields_for :user do |builder| %>
<div class="form-group">
<%= builder.label "Email or Username" %>
<%= builder.text_field :email, class: "form-control" %>
</div>
<div class="form-group">
<%= builder.label :password %>
<%= builder.password_field :password, class: "form-control" %>
</div>
<% end %>
<div class="form-group">
<%= form.label :first_name %>
<%= form.text_field :first_name, class: "form-control", placeholder: "First name" %>
</div>
<div class="form-group">
<%= form.label :last_name %>
<%= form.text_field :last_name, class: "form-control", placeholder: "Last name" %>
</div>
<div class="form-group">
<% Clinician.where(care_group_id: @care_group.id).each do |clinician| %>
<%= check_box_tag "patient[clinician_ids][]", clinician.id, @patient.clinician_ids.include?(clinician.id), id: dom_id(clinician) %>
<%= label_tag dom_id(clinician), clinician.full_name %><br>
<% end %>
</div>
<%= form.button 'Create Patient', class: "btn btn-u btn-success" %>
<% end %>
此方法目前无法保存 clinician
到 patient
关联。
patient_controller.rb
def new
@patient = Patient.new
@user = User.new
@patient.build_user
@care_group = current_clinician.care_group
end
def create
@patient = Patient.create(patient_params)
@patient.care_group = current_clinician.care_group
if @patient.save
redirect_to patient_path(@patient), notice: "New patient created!"
else
render "new"
end
end
def show
@patient = Patient.find_by(id: params["id"])
end
private
def patient_params
params.require(:patient).permit({:clinician_ids => [:id]},:first_name,:last_name,:user_id,:birth_date, user_attributes: [ :email, :password, :patient_id, :clinician_id ])
end
我计划在患者 show
页面上显示与 patient
关联的 clinicians
:
患者show.html.erb
<strong>Shared with:</strong>
<% @patient.clinicians.each do |clinician| %>
<%= clinician.full_name %><
<% end %>
如果我为数据库做种,这会起作用,但由于数据似乎没有存储,所以没有显示任何内容。
Rails 4.1.8,ruby 2.2.1p85,PostgreSQL
谢谢
我认为您的问题出在控制器中的这一行:
params.require(:patient).permit({:clinician_ids => [:id]}...
应该是:
params.require(:patient).permit({:clinician_ids => []}...