即使在rails 5中列入白名单后仍未获得许可

时间:2017-11-01 18:38:18

标签: ruby-on-rails ruby-on-rails-5 nested-forms

项目详情 - > rails 5.1和ruby 2.4.1

我正在尝试创建一个简单的待办事项应用。我的问题是嵌套的模型形式。 如果我创建一个没有任何任务的项目,我保存它。然后,如果我想编辑项目并添加一些任务,则任务字段不会显示。如果我在创建项目时添加任务,一切都按预期工作。在编辑页面我可以看到项目和任务,我也可以编辑。

下面是我的两个型号。我没有使用嵌套路线。只使用嵌套的模型表单。

class Project < ApplicationRecord
   has_many :tasks, inverse_of: :project, dependent: :destroy
   validates :name, presence: :true
   validates :description, presence: :true
   accepts_nested_attributes_for :tasks, reject_if: proc { |attributes| attributes[:name].blank? }
end

class Task < ApplicationRecord
   belongs_to :project, inverse_of: :tasks
end

以下是我的_form partial for new和edit。

<%= form_for @project do |form| %>
        <% if @project.errors.any? %>
        <div id="error_explanation">
          <h2><%= pluralize(@project.errors.count, "error") %> prohibited this project from being saved:</h2>
          <ul>
          <% @project.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
          </ul>
        </div>
      <% end %>

      <div class="field">
        <%= form.label :name %>
        <%= form.text_field :name, id: :project_name %>
      </div>

      <div class="field">
        <%= form.label :description %>
        <%= form.text_field :description, id: :project_description %>
      </div>

      <%= form.fields_for :tasks do |task_form| %>
        <div class="field">
          <%= task_form.label :task_name %>
          <%= task_form.text_field :name, id: :task_name %>
        </div>
        <div class="field">
          <%= task_form.label :task_description %>
          <%= task_form.text_field :description, id: :task_description %>
        </div>
      <% end %>

      <div class="actions">
        <%= form.submit  %>
      </div>
<% end %>

项目控制器的白名单如下。

 def project_params
   params.require(:project).permit(:name, :description, tasks_attributes: [:id, :name, :description])
 end

感谢任何帮助 -Ajith

1 个答案:

答案 0 :(得分:1)

  

如果我创建一个没有任何任务的项目并保存它。然后,如果我想编辑项目并添加一些任务,则任务字段不会显示。

......实际应该如何。因此,您的问题很可能与强参数问题无关,因为我在您的视图文件和project_params方法中没有发现任何明显的问题。现在既然你不想要这种行为,那么你可能会想要以下内容,如果没有task,默认情况下会构建一个或多个task个对象与project关联的对象,以便在您创建或修改task时始终至少有一组project个字段。

应用/控制器/ projects_controller.rb

class ProjectsController < ApplicationController
  def new
    @project = Project.new
    @project.tasks.build
    # the above code just above is the same as below
    # @project.tasks << Task.new

    # now you can call this again like below, if you want 2 groups of `tasks` fields when you're creating a Project
    @project.tasks.build
  end

  def edit
    @project = Project.find(params[:id])

    # this project may not yet have a `Task` object associated to it; if so we build a `Task` object like so
    # this builds 3 `Task` objects; you can just use one below if you just want to show one in your edit form.
    if @project.tasks.count == 0
      @project.tasks.build
      @project.tasks.build
      @project.tasks.build
    end
  end
end

P.S。如果你想拥有一个可以为你自动构建动态嵌套属性的表单(比如你想要2个按钮,如下所示)&#39;(添加更多任务)&#39;你可能对cocoon gem感兴趣39;和&#39;(删除此任务)`