【发布时间】:2018-06-15 20:48:32
【问题描述】:
我遵循 Railscast 以一种形式同时编辑多条记录。链接在这里:http://railscasts.com/episodes/165-edit-multiple-revised
这对于在同一个表单模式上编辑多个 onboarding_steps 非常有用。基本上我们标记每个步骤的完成日期并点击保存。
但是现在,其中一个步骤有一个清单,列出了在完成之前要收集的东西,他们希望将清单放在同一张表格上。一旦我在<%= f.fields_for :onboarding_checkbox, onboarding_step.onboarding_checkbox do |checkboxes_form| %> 部分中添加了表单,表单就会损坏并抛出No route matches [POST],因为表单应该使用 PUT。出于某种原因,添加嵌套属性使其想要执行 POST 而不是 PUT。
这是在添加嵌套属性之前正常工作:
Started PUT "/onboarding_steps/update_multiple" for ::1 at 2018-06-15 15:25:25 -0500
Processing by OnboardingStepsController#update_multiple as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"",
"onboarding_steps"=>{"531"=>{"completed_date"=>""}, "280"=>{"completed_date"=>"02/09/2018"}}}, "commit"=>"Update"}
这就是它对嵌套部分所做的事情:
Invalid or incomplete POST params
Started POST "/onboarding_steps/update_multiple" for ::1 at 2018-06-15 15:47:08 -0500
ActionController::RoutingError (No route matches [POST] "/onboarding_steps/update_multiple"):
_edit_multiple.html.erb
<%= form_for :onboarding_steps, :url => update_multiple_onboarding_steps_path, :html => {:method => :put} do |form| %>
...
<% @onboarding_steps.each do |onboarding_step| %>
<%= fields_for "onboarding_steps[]", onboarding_step do |f| %>
... this is where it breaks the form ...
<% if onboarding_step.onboarding_checkbox.present? %>
<%= f.fields_for :onboarding_checkbox, onboarding_step.onboarding_checkbox do |checkboxes_form| %>
<%= submit_tag "Update", :class=>"btn btn-small btn-primary" %>
onboarding_steps_controller.rb
def edit_multiple
onboarding_step = OnboardingStep.find(params[:onboarding_step_id])
@onboarding_steps = OnboardingStep.includes(:onboarding_step_type).find(onboarding_step.group_steps.ids)
end
def update_multiple
logger.debug params
params.permit!
@onboarding_steps = OnboardingStep.update(params[:onboarding_steps].keys, params[:onboarding_steps].values)
@onboarding_steps.reject! { |s| s.errors.empty? }
if @onboarding_steps.empty?
redirect_to :back, notice: 'Update Successful'
else
render "edit_multiple"
end
end
底部包含onboarding_checkbox_attributes:[]
onboarding_step.rb 有accepts_nested_attributes_for :onboarding_checkbox
routes.rb
resources :onboarding_steps do
resources :onboarding_checkboxes
member do
get "delete"
end
collection do
get :edit_multiple
put :update_multiple
end
end
不知道哪里出了问题。今天是星期五,我的大脑被炸了
【问题讨论】:
标签: ruby-on-rails ruby forms post nested