保存之前,是否可以为没有父记录的嵌套资源创建表单?

时间:2018-08-15 13:49:25

标签: ruby-on-rails nested-resources simple-form-for

我有两个模型PlayerMicroReportMicroReportPlayer的嵌套资源。我正在尝试创建一个单独的表单,以允许用户创建MicroReport,而不必先导航到播放器的页面然后创建报告。这可能吗?

我要尝试使用以下表格,他们可以在创建表格时选择一名球员-但据我所知,我需要在此处指定一名球员记录(目前尚无此记录)存在)。

<%= simple_form_for [@micro_report.player, @micro_report] do |form| %>
  <div class="row">
    <div class="col-xs-12">
      <%= form.input :author_id, as: :hidden, input_html: { value: current_user.id } %>
      <%= form.input :player, input_html: { class: "player-search-box-for-micro-report" }, 
           data: { autocomplete_source: auto_complete_searches_path } %>
      <%= form.input :grade, collection: Grade.joins(:scale)
           .where(scales: { name: "Skill Scale" } ) %>
      <%= form.input :summary, label: "Summary" %>
    </div>
  </div>

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

class Player < ApplicationRecord
  has_many :micro_reports
end

class MicroReport < ApplicationRecord
  belongs_to :author
  belongs_to :player
  belongs_to :grade
end

routes.rb

resources :players do
 scope module: :players do
   resources :micro_reports  
 end
end

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要将optional: true添加到belongs_to :player

belongs_to :player, optional: true

Documentation

  

required默认情况下设置为true,不建议使用。如果你不这样做   要验证关联状态,请使用optional: true

通过此设置,您可以创建MicroReport条记录,而无需在创建时添加Player条记录。