我在一个视图页面上有两个表单。其中一个是更新表格。另一种形式是单个按钮,它转到相同的控制器操作但实际上并不更新表单。这是第一种形式:
<%= form_for [@project, @schedule] do |f| %>
<%= f.fields_for :tasks do |builder| %>
<%= render 'task_fields', :f => builder %>
<% end %>
<p><%= link_to_add_fields "Add task", f, :tasks %>
<p><%= f.submit "Submit" %></p>
<% end %>
这是第二种形式:
<%= form_tag project_schedule_path(@project, @schedule), method: "patch" do %>
<div><%= hidden_field_tag :emp_accepts, true %></div>
<%= submit_tag "Accept schedule", class: "btn btn-large btn-primary" %>
<% end %>
问题是强大的参数。强参数需要:schedule,只有第一种形式提供。所以当我尝试使用第二种形式时,会返回错误。以下是强烈的参数:
def schedule_params
params.require(:schedule).permit(:emp_accepts,
tasks_attributes: [:title, :content, :_destroy])
end
答案 0 :(得分:1)
您应该将第二个表单更改为
<%= form_for [@project, @schedule], http: { method: 'patch' } do |f| %>
<div><%= f.hidden_field :emp_accepts, value: true %></div>
<%= f.submit 'Accept schedule', class: 'btn btn-large btn-primary' %>
<% end %>
答案 1 :(得分:0)
看起来你应该为每个动作使用不同的控制器方法。这将使您在将来轻松进行更改。