我有ActiveRecord與一個子類及其與另一個ActiveRecord對象關聯。 我能夠創建我的對象具有嵌套屬性的嵌套屬性沒有問題的新對象(以下瑞安貝茨鐵軌投 - 謝謝你的方式:))。但是,當我做更新它無法保存更改主要對象或提交時相關對象當嵌套對象是ActiveRecord子類時,嵌套屬性更新失敗
我有以下Activerecord類和子類。
class Room < ActiveRecord::Base
attr_accessible :name, :type, room_headers_attributes
has_many :room_headers, dependent: :destroy
accepts_nested_attributes_for :room_headers , :allow_destroy => true
end
和子類是
class BigRoom < Room
end
和相關類是
class RoomHeader < ActiveRecord::Base
attr_accessible :key, :room_id, :value
belongs_to :room
end
在我的房間控制器我創建的嵌套對象。請注意,我用:類型指定用於創建和編輯的子類型
def new
@room = current_user.passes.build(params[:room])
@room.type = params[:type]
3.times do
room_header = @room.room_headers.build
end
....
end
....
def edit
@room = Room.find(params[:id])
end
def update
@room = Room.find(params[:id])
if @room.update_attributes(params[:room])
...
的形式是一樣的
<%= form_for(@room) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<%= f.fields_for :room_headers do |builder| %>
<%= render 'room_header_fields', f: builder %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end &>
而且_room_headers.html.erb部分是
<p class="fields">
<%= f.label :key, "Key" %>
<%= f.text_field :key %>
<%= f.label :value, "Value" %>
<%= f.text_field :value %>
<%= f.check_box :_destroy %>
<%= f.label :_destroy, "Remove Header" %>
</p>
回顧一下這個問題。我可以成功創建一個新的BigRoom。在創建BigRoom的新窗體中,我可以成功地爲RoomHeader類設置值,並且這些都成功保存。
但是,當我編輯記錄並提交更新更新,沒有任何保存。可用於更改Bigroom屬性或關聯的RoomHeader記錄。
我不知道我明白你在暗示我做什麼? –
update_attribute不驗證它只是保存它的記錄,而update_attributes首先驗證然後保存。所以我問你檢查是否由於驗證不保存 –
我現在得到'錯誤數量的參數(1爲2)' –