gpt4 book ai didi

ruby-on-rails-3 - Rails 3 : Passing belongs_to field in form, 无法批量分配 protected 属性

转载 作者:行者123 更新时间:2023-12-03 18:16:46 24 4
gpt4 key购买 nike

我有两个模型类,Patient 和 Prescription,它们有一个belongs_to 关系:

class Prescription
belongs_to :patient
...

我有一个用于创建新 Prescription 对象的表单,我希望它从隐藏字段中获取患者:
<%= form_for(@prescription) do |f| %>
...
<%= f.hidden_field :patient_id, :value => @patient.id %>
...

在处方 Controller 中,我想使用从表单中获得的参数创建一个新处方:
  def create
@prescription = Prescription.new(params[:prescription])
...

有些东西不起作用。我可以在日志中看到患者 ID 正在参数中传递,但它没有被插入到数据库中:

在 2011-05-13 14:59:00 +0200 开始为 127.0.0.1 发布“/prescriptions”
由 PrescriptionsController#create 处理为 HTML
参数:{"utf8"=>"✓", "authenticity_token"=>"h3rizbBoW069EfvQf6NyzH53k+g4o4XO61jeZ/GF6t0=", "prescription"=>{"medicine_name"=>"w", "dispense_date(1i)"2011", "dispense_date(2i)"=>"5", "dispense_date(3i)"=>"13", "days_supply"=>"2", "patient_id"=>"1"}, "commit"= >“创建处方”}
警告:无法批量分配 protected 属性:patient_id
患者负荷 (0.2ms) SELECT "patients".* FROM "patients"WHERE "patients"."id"IS NULL LIMIT 1
AREL (0.4ms) INSERT INTO "prescriptions"("medicine_name", "dispense_date", "days_supply", "patient_id", "created_at", "updated_at") VALUES ('w', '2011-05-13', 2 , NULL, '2011-05-13 12:59:00.690434', '2011-05-13 12:59:00.690434')

关于批量分配 protected 属性的警告消息是什么意思?如何更改代码以使其正常工作?

最佳答案

我认为您已经错过了有关 Rails 的一件伟大的事情,这在这种情况下确实会有所帮助。这就是在路由中嵌套资源的可能性。

例如,如果您的 routes.rb 如下所示:

resources :patients do
resources :prescriptions
end

这将导致您的 Controller 的 url 看起来像 /patients/:patient_id/prescriptions/这样做的结果是,由于患者 ID 已经存在于 url 中,因此您不必有任何隐藏表单来存储它。因此,在您的 PrescriptionsController 中,创建操作可能如下所示:
def create
@patient = Patient.find(params[:patient_id])
@prescription = @patient.prescriptions.build(params[:prescription])

当您使用关联“构建”实例而不是直接使用模型时,它会自动为您分配patient_id。

这可能不是您问题的确切答案,但这可能是我的方式。

关于ruby-on-rails-3 - Rails 3 : Passing belongs_to field in form, 无法批量分配 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5992428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com