[英]Insert & Update with strong parameters for nested `belongs_to` association
我有一個學生可以報名參加課程的表格。 當用戶提交表單時,他就會注冊該課程並保存他的付款信息。 換句話說,創建了一個Enrollment
對象並更新了Student
對象...除了我無法讓Student
更新。 這可能嗎? 如果是這樣,怎么樣?
我的模特......
class Student < ActiveRecord::Base
has_many :enrollments
end
class Enrollment < ActiveRecord::Base
belongs_to :student
accepts_nested_attributes_for :student
end
我的(縮寫)形式......
<%= form_for :enrollment, html: { id: "enrollment_form" } do |f| %>
<%= f.fields_for :student_attributes do |student_builder| %>
<%= student_builder.hidden_field :payment_name %>
<% end %>
<%= f.hidden_field :payment_token %>
<div class="field terms">
<%= f.check_box :agreed_to_terms %>
<%= f.label :agreed_to_terms, "I agree to the terms and conditions." %>
</div>
<% end %>
我的控制器......
class EnrollmentsController < ApplicationController
def create
@enrollment = Enrollment.new(enrollment_params)
@enrollment.clazz_id = @clazz.id
@enrollment.student_id = @student.id
@enrollment.save
end
private
def enrollment_params
params.require(:enrollment).permit(:payment_token, :agreed_to_terms, student_attributes: [:payment_name])
end
end
POST參數......
{
"enrollment"=> {
"student_attributes"=> {
"payment_name"=> "MasterCard ending in 9840"
},
"payment_token"=> "CC11ho86XxVqsUW7Cn9YjCHg?1376007969212",
"agreed_to_terms"=> "1"
},
"clazz_id"=> "7"
}
我已經嘗試過在表單構建器student
, students
, _attributes
每個排列,但它們似乎都不起作用。
好的,我看到了一些事情:
嵌套屬性,如API中所述 ,“允許您通過 父級保存關聯記錄的屬性”。 這意味着
class Enrollment < ActiveRecord::Base belongs_to :student accepts_nested_attributes_for :student end
本質上不起作用,因為您試圖接受來自父級的嵌套屬性。 因此,您需要首先重新考慮您的Active Record配置。
如果我們假裝全部平方,那么更多的語法錯誤是:
更換
<%= f.fields_for :student_attributes do |student_builder| %>
同
<%= f.fields_for :students do |student_builder| %>
這可能令人困惑,但是傳遞:students
到fields_for
幫助器調用嵌套的學生對象,而:student_attributes
是來自fields_for
產生的POST參數的哈希鍵。
在強參數中,您還需要允許student :id
以便您的更新操作具有參考。 否則,它只會創建一個新學生。 所以改成它
private def enrollment_params params.require(:enrollment).permit(:payment_token, :agreed_to_terms, student_attributes: [:payment_name, :id]) end
我不確定這是否一切,但希望這是一個開始。 祝好運。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.