【发布时间】:2015-04-17 08:53:17
【问题描述】:
我正在使用 Cocoon gem 来做嵌套表单。 我有这样的模型:
# request.rb
has_many :filled_cartridges, inverse_of: :request, dependent: :destroy
accepts_nested_attributes_for :filled_cartridges, :reject_if => :all_blank, allow_destroy: true
#filled_cartridge.rb
belongs_to :request
在我的 form_for @request 内部,我有这样的嵌套表单:
<div id="filled_cartridges">
<%= f.fields_for :filled_cartridges do |filled_cartridge| %>
<%= render 'filled_cartridge_fields', f: filled_cartridge %>
<% end %>
<div class="links">
<%= link_to_add_association 'add', f, :filled_cartridges %>
</div>
fill_cartridge_fields partial 是这样的:
<fieldset>
<%= f.text_field :cartridge_id %>
<%= f.hidden_field :_destroy %>
<%= link_to_remove_association "remove", f %>
</fieldset>
当我点击“添加”时,它又添加了一个。单击“删除”时,它会删除 . 当我提交表单时,嵌套表单的参数如下所示:
filled_cartridges_attributes: !ruby/hash:ActionController::Parameters
'0': !ruby/hash:ActionController::Parameters
cartridge_id: '12'
_destroy: 'false'
'1429260587813': !ruby/hash:ActionController::Parameters
cartridge_id: '2'
_destroy: 'false'
def create
@request = Request.new( request_params )
# code for handling Request model
# here i want to handle nested model too (filled_cartridge)
@request.save
if @request.save
flash[:success] = "Заявка была добавлена"
redirect_to @request
else
render 'new'
end
end
EDIT2:我的强参数:
def request_params
params.require(:request).permit(:name, :address, :phone, :mobile, :type, :description, :priority, :responsible, :price, :payed, :date, filled_cartridges_attributes: [:cartridge_id, :_destroy], :stype_ids => [], :social_media =>[])
end
【问题讨论】:
-
你能粘贴你的控制器代码吗?
-
@japed 我已经编辑了我的帖子
-
request_params方法中有什么?我猜你没有告诉 strong_parameters 接受filled_cartridges_attributes -
@japed 我编辑了我的帖子。
-
@japed,我明白了。我传递了错误的参数,而不是我需要传递的 id 墨盒 ID。但我不希望自动保存记录,我需要在保存之前访问这些参数并做一些事情。
标签: ruby-on-rails ruby cocoon-gem