mysql - Rails 5 不使用 Cocoon gem 在 Ruby-on-Rails 中使用嵌套表单保存到我的表

标签 mysql ruby-on-rails nested-forms cocoon-gem

RAILS 5 问题。我有一个项目,我希望用户可以选择向表单添加额外的项目。我的代码正确呈现,它添加更多字段的链接确实添加了更多文本字段。我遇到的问题是没有将 保存到我的数据库中。我在 MySQl 数据库上使用 mysql2 gem。我发布了控制台输出。这是我的:

表单 Controller

  # forms_controller.rb
  def new
    @form = Form.new

    respond_to do |format|
      format.html # new.html.erb
      format.xml  { render :xml => @form }
    end
  end
  def create
    @form = Form.new(form_params)

    respond_to do |format|
      if @form.save
        format.html { redirect_to(@form, :notice => 'form was successfully created.') }
        format.xml  { render :xml => @form, :status => :created, :location => @form }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @form.errors, :status => :unprocessable_entity }
      end
    end
  end

  def form_params
    params.require(:form).permit(:name, items_attributes: [:id, :item_name, :_destroy])
  end

模型

# form.rb
class Form < ApplicationRecord
  has_many :items
  accepts_nested_attributes_for :items, reject_if: :all_blank, allow_destroy: true
  validates_presence_of :name
end

# item.rb
class Item < ApplicationRecord
   belongs_to :form
end

观看次数

<!-- _form.html.haml -->

= form_for @form do |f|
  .field
    = f.label :name
    %br
    = f.text_field :name
  %h3 items
  #items
    = f.fields_for :items do |item|
      = render 'item_fields', f: item
    .links
      = link_to_add_association 'add item', f, :items
  = f.submit
.nested-fields
  .field
    = f.label :item_name
    %br
    = f.text_field :item_name
  = link_to_remove_association "remove item", f

控制台

tarted POST "/forms" for 127.0.0.1 at 2016-09-08 23:04:17 -0600
Processing by FormsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"FmYPwlXy93iwBMkWvfyd3QJ+NKDcYnraUaKmMISbUIX3+KRL7KtpD33FW3CK+jxvn4AoUUMhx4zrGncJej5BOw==", "form"=>{"name"=>"sfsf", "items_attributes"=>{"1473397456358"=>{"item_name"=>"sfsf", "_destroy"=>"false"}}}, "commit"=>"Create Form"}
   (0.2ms)  BEGIN
   (0.3ms)  ROLLBACK
  Rendering forms/new.html.haml within layouts/application
  Rendered forms/_item_fields.html.haml (1.5ms)
  Rendered forms/_item_fields.html.haml (1.2ms)
  Rendered forms/_form.html.haml (8.5ms)
  Rendered forms/new.html.haml within layouts/application (10.1ms)
Completed 200 OK in 68ms (Views: 54.5ms | ActiveRecord: 0.5ms)

最佳答案

在您的 permit/require 行(在您的 Controller 中),item_attribute 可能应该是 item_attributes(不止一个)即:

def form_params
  params.require(:form).permit(:name, :date_sent, :quantity, :comment, item_attributes: [:id, :name, :form_id, :_destroy])
end

关于mysql - Rails 5 不使用 Cocoon gem 在 Ruby-on-Rails 中使用嵌套表单保存到我的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39402913/

相关文章:

php - Symfony VichUploader : Cannot see file button to upload

mysql - 即使所有都是 InnoDB 并且存在外键,也无法添加或更新子行

mysql - 在 Laravel 中将 SQL 查询转储到屏幕

css - 无法使用 Rails 迭代进行溢出

ruby-on-rails - rails 中的异常处理有什么好的最佳实践吗?

ruby-on-rails - accepts_nested_attributes_for的替代方法-也许是virtus

ruby-on-rails - 更新嵌套哈希参数。更新 Action ,ruby on rails

mysql自动防止冗余插入

ruby-on-rails - Rails 事件记录中的代表

forms - react : how to use child FormItem components without getting Warning: validateDOMNesting: <form> cannot appear as a descendant of <form>