about 4 years ago

在有些情況我們會需要做 Nested Form,這時候就需要將 Nested Form 的 Attributes 也加到 Strong Parameters 內。

假設每一個 Person Model 有都可以有一頂 Hat,在新增 Person 的時候用 Nested Form 同時新增 Hat 的顏色。我們應該這樣做:

1.在 Person Modle 中宣告我們可以接受 hat 的 attributes:

class Person < ActiveRecord::Base
  has_one :hat
  accepts_nested_attributes_for :hat
end
=begin
  Hat Database Information:
    id:integer
    color:string
    created_at:datetime
    updated_at:datetime
=end
class Hat < ActiveRecord::Base
    belongs_to :person
end

2.在 Controller 中指定接收的 Attributes

由於我們在 People Controller 內的 Strong Parameters 並不包含 color 這個 Attributes,所以在新增 Hat 的時候就無法把 color 寫進資料庫,這時候需要加上 hats_attributes: [] 這個 Attributes,並且將要傳的 Hat Attributes 寫進 Array 中:

class PeopleController < ActionController::Base
  def update
    person.update_attributes!(person_params)
    redirect_to :back
  end

  private
    def person_params
      params.require(:person).permit(:name, :age, hats_attributes: [:color])
    end
end

這樣就可以通過 People Controller 的驗證了。

← Rails Delegate Rails RESTful API →
 
comments powered by Disqus