Mysql Rails 5没有使用Cocoon gem在Ruby on Rails中使用嵌套表单保存到我的表

Mysql Rails 5没有使用Cocoon gem在Ruby on Rails中使用嵌套表单保存到我的表,mysql,ruby-on-rails,nested-forms,cocoon-gem,Mysql,Ruby On Rails,Nested Forms,Cocoon Gem,Rails5问题。我有一个项目,我希望用户可以选择向表单中添加额外的项目。我的代码正确呈现,并且添加更多字段的链接确实会添加更多文本字段。我的问题是没有将数据保存到我的数据库中。我正在MySQl数据库上使用mysql2 gem。我发布了控制台输出。这就是我所拥有的: 表格控制器 模型 控制台 在您的许可/要求行(在控制器中),项目属性可能应该是项目属性(有多个),即: 在您的许可/要求行(在控制器中),项目属性可能应该是项目属性(有多个),即: 它无法保存的原因是因为我使用的是Rails 5,我

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

表格控制器

模型

控制台


在您的许可/要求行(在控制器中),
项目属性
可能应该是
项目属性
(有多个),即:


在您的许可/要求行(在控制器中),
项目属性
可能应该是
项目属性
(有多个),即:


它无法保存的原因是因为我使用的是Rails 5,我需要将
optional:true
添加到项目模型中的所属对象

# 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 , optional: true
end
#form.rb
类窗体<应用程序记录
你有很多东西吗
为:项接受\u嵌套的\u属性\u,如果::all\u为空则拒绝\u,允许\u销毁:true
验证是否存在:name
结束
#项目1.rb
类项<应用程序记录
属于:表单,可选:true
结束

它无法保存的原因是我使用的是Rails 5,我需要将
可选:true
添加到项目模型中的所属对象

# 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 , optional: true
end
#form.rb
类窗体<应用程序记录
你有很多东西吗
为:项接受\u嵌套的\u属性\u,如果::all\u为空则拒绝\u,允许\u销毁:true
验证是否存在:name
结束
#项目1.rb
类项<应用程序记录
属于:表单,可选:true
结束

在Rails 5中,每当我们定义一个属于关联时,在这个更改之后,默认情况下需要有关联的记录

如果关联的记录不存在,则会触发验证错误

class User < ApplicationRecord
end

class Post < ApplicationRecord
  belongs_to :user
end

post = Post.create(title: 'Hi')
=> <Post id: nil, title: "Hi", user_id: nil, created_at: nil, updated_at: nil>

post.errors.full_messages.to_sentence
=> "User must exist"
class用户 
post.errors.full_messages.to_句子
=>“用户必须存在”
****在Rails 5中选择退出此默认行为****

我们可以将optional:true传递给将删除此验证检查的关联

class Post < ApplicationRecord

  belongs_to :user, optional: true

end

post = Post.create(title: 'Hi')

=> <Post id: 2, title: "Hi", user_id: nil>
class Post 

在Rails 5中,每当我们定义一个属于关联时,在这个更改之后,默认情况下需要有关联的记录

如果关联的记录不存在,则会触发验证错误

class User < ApplicationRecord
end

class Post < ApplicationRecord
  belongs_to :user
end

post = Post.create(title: 'Hi')
=> <Post id: nil, title: "Hi", user_id: nil, created_at: nil, updated_at: nil>

post.errors.full_messages.to_sentence
=> "User must exist"
class用户 
post.errors.full_messages.to_句子
=>“用户必须存在”
****在Rails 5中选择退出此默认行为****

我们可以将optional:true传递给将删除此验证检查的关联

class Post < ApplicationRecord

  belongs_to :user, optional: true

end

post = Post.create(title: 'Hi')

=> <Post id: 2, title: "Hi", user_id: nil>
class Post 

在您的许可/要求行(在您的控制器中),
项目属性
可能应该是
项目属性
(有多个)。您的代码是否包含所有验证?因为这看起来是一个验证错误(现在),如果我正确读取了您的日志文件,您将在实际执行任何SQL之前得到一个回滚,因此这将表明rails端的验证实际上正在阻塞,甚至试图将数据保存到数据库中。在您的许可/要求行(在您的控制器中),
item\u属性
应该是
item\u属性
(不止一个)您的代码是否包含所有验证?因为这看起来是一个验证错误(现在),如果我正确读取了您的日志文件,您会在实际执行任何SQL之前得到一个回滚,因此这表明rails端的验证实际上正在阻塞,甚至尝试将数据保存到数据库中。我看到了这一点,但它仍然不起作用。现在我得到了一个begin和rollback,它对数据库没有任何更改。我最近更新了inquery,并且当前代码已更新。我把代码改得更像脚手架,因为我想我可能做错了什么。我一直在关注这个宝石。这肯定是导致您当前错误的原因。。。您可能还有另一个错误,现在已被揭示。(嵌套错误的乐趣):)我想我的问题可能是我在使用mysql2。你曾经在rails使用mysql进行嵌套循环时遇到过问题吗?我通常使用postgres。。。但这不应该是问题所在。如果您更新问题并删除原始数据,这是非常困难的。。。然后答案和评论就没有意义了。。。通常情况下,我们会用新的信息对原始问题进行额外的更新,而不是将其更改以匹配新的知识-这样,人们回头看这个问题时可以看到事情是如何随时间发展的:)我修复了它。我只需要在我的项目模型上添加可选的:true to my beliens\u to。我认为这是rails 5的一个问题。另外,我想说的是嵌套形式。我太绝望了,我付钱请人帮我修理。我现在正沿着我的发展方向前进。谢谢你的帮助。我看到了,但还是不起作用。现在我得到了一个begin和rollback,它对数据库没有任何更改。我最近更新了inquery,并且当前代码已更新。我把代码改得更像脚手架,因为我想我可能做错了什么。我一直在关注这个宝石。这肯定是导致您当前错误的原因。。。您可能还有另一个错误,现在已被揭示。(嵌套错误的乐趣):)我想我的问题可能是我在使用mysql2。你曾经在rails使用mysql进行嵌套循环时遇到过问题吗?我通常使用postgres。。。但这不应该是问题所在。如果您更新问题并删除原始数据,这是非常困难的。。。答案和评论
# 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 , optional: true
end
class User < ApplicationRecord
end

class Post < ApplicationRecord
  belongs_to :user
end

post = Post.create(title: 'Hi')
=> <Post id: nil, title: "Hi", user_id: nil, created_at: nil, updated_at: nil>

post.errors.full_messages.to_sentence
=> "User must exist"
class Post < ApplicationRecord

  belongs_to :user, optional: true

end

post = Post.create(title: 'Hi')

=> <Post id: 2, title: "Hi", user_id: nil>