【问题标题】:Rails - two forms on one pageRails - 一页上有两种形式
【发布时间】:2013-11-26 15:45:21
【问题描述】:

我在一个视图页面上有两个表单。其中之一是更新表格。另一种形式是单个按钮,它转到相同的控制器操作,但实际上并不更新表单。这是第一种形式:

<%= 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

【问题讨论】:

    标签: ruby-on-rails forms ruby-on-rails-4 form-for strong-parameters


    【解决方案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 %>
    

    【讨论】:

      【解决方案2】:

      看起来你真的应该为每个动作使用不同的控制器方法。这将使您在未来轻松进行更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2015-11-14
        • 1970-01-01
        • 2015-05-15
        • 2013-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多