无法将记录保存到数据库 RAILS 个嵌套表单
Cannot save record to database RAILS nested forms
我似乎无法使用嵌套表格保存我的记录。
pry 是这么说的:
pry(#<VenuesController>)> @venue.save
(0.3ms) begin transaction
Tag Exists (0.2ms) SELECT 1 AS one FROM "tags" WHERE ("tags"."name" = 'All ' AND "tags"."id" != 2) LIMIT 1
Tag Exists (0.1ms) SELECT 1 AS one FROM "tags" WHERE "tags"."name" = '' LIMIT 1
(0.1ms) rollback transaction
=> false
我以为我完全正确地遵循了所有内容。
这是我的标签嵌套形式
Tags:
<%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name %><br>
Make a New Tag Here: <br>
<%= f.fields_for :tags, Tag.new do |tag_field| %>
<%= tag_field.label :name_tag %>
<%= tag_field.text_field :name %>
<% end %>
这是我的场地模型
class Venue < ActiveRecord::Base
has_many :venue_tags
has_many :tags, :through => :venue_tags
accepts_nested_attributes_for :tags, allow_destroy: true
end
还有我的标签模型
class Tag < ActiveRecord::Base
has_many :venue_tags
has_many :venues, :through => :venue_tags
validates_uniqueness_of :name
end
但是把'validate uniqueness of name'去掉后还能保存,但是新标签是自己加的
这是证明它是真实的撬动日志,但现在我将正确的标签添加到场地,而且还向场地添加了一个新标签(不是我自己创建的)。我假设这是因为 New Tag Fields_for 文本是空白的,它自己创建了一个新标签。
(0.2ms) begin transaction
SQL (0.6ms) INSERT INTO "venues" ("name", "address", "discount", "latitude", "longitude", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["name", "SPICEBOX"], ["address", "33 Pell St, New York, NY 10013, United States"], ["discount", "10% OFF with Student ID"], ["latitude", 40.714831], ["longitude", -73.998628], ["created_at", "2015-11-03 06:12:52.400643"], ["updated_at", "2015-11-03 06:12:52.400643"]]
SQL (0.2ms) INSERT INTO "venue_tags" ("tag_id", "venue_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["tag_id", 2], ["venue_id", 11], ["created_at", "2015-11-03 06:12:52.404715"], ["updated_at", "2015-11-03 06:12:52.404715"]]
SQL (0.2ms) INSERT INTO "tags" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", ""], ["created_at", "2015-11-03 06:12:52.408821"], ["updated_at", "2015-11-03 06:12:52.408821"]]
SQL (0.1ms) INSERT INTO "venue_tags" ("venue_id", "tag_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["venue_id", 11], ["tag_id", 9], ["created_at", "2015-11-03 06:12:52.411692"], ["updated_at", "2015-11-03 06:12:52.411692"]]
(1.4ms) commit transaction
=> true
However, when take off the 'validate uniqueness of name', I can save
it
检查数据库中的名称,看看它是否已经存在。
既然你能保存记录,你的代码应该没问题。
要查看为什么记录不想保存,您可以询问您尝试保存的对象的错误。您可以在您的撬动控制台中执行此操作。
@venue.save
...
=> false
@venue.errors.messages
=> ...
它可能会告诉您您已经有同名的记录。如果是这种情况,那么您的记录没有保存是有道理的。
您可能应该添加一个验证 :presence 到标签名称。您的数据库中似乎有一个没有名称的标签,当您添加另一个没有名称的标签时,它不是唯一的并且不会通过验证。
查看表单或强参数,了解该值是如何被清除的(如果是的话)。
如果它是空白的,因为它是故意以这种方式提交的,如果它是空白的,你可以忽略它。
accepts_nested_attributes_for :tags, allow_destroy: true, :reject_if => lambda { |a| a[:name].blank? }
我似乎无法使用嵌套表格保存我的记录。
pry 是这么说的:
pry(#<VenuesController>)> @venue.save
(0.3ms) begin transaction
Tag Exists (0.2ms) SELECT 1 AS one FROM "tags" WHERE ("tags"."name" = 'All ' AND "tags"."id" != 2) LIMIT 1
Tag Exists (0.1ms) SELECT 1 AS one FROM "tags" WHERE "tags"."name" = '' LIMIT 1
(0.1ms) rollback transaction
=> false
我以为我完全正确地遵循了所有内容。 这是我的标签嵌套形式
Tags:
<%= f.collection_check_boxes :tag_ids, Tag.all, :id, :name %><br>
Make a New Tag Here: <br>
<%= f.fields_for :tags, Tag.new do |tag_field| %>
<%= tag_field.label :name_tag %>
<%= tag_field.text_field :name %>
<% end %>
这是我的场地模型
class Venue < ActiveRecord::Base
has_many :venue_tags
has_many :tags, :through => :venue_tags
accepts_nested_attributes_for :tags, allow_destroy: true
end
还有我的标签模型
class Tag < ActiveRecord::Base
has_many :venue_tags
has_many :venues, :through => :venue_tags
validates_uniqueness_of :name
end
但是把'validate uniqueness of name'去掉后还能保存,但是新标签是自己加的
这是证明它是真实的撬动日志,但现在我将正确的标签添加到场地,而且还向场地添加了一个新标签(不是我自己创建的)。我假设这是因为 New Tag Fields_for 文本是空白的,它自己创建了一个新标签。
(0.2ms) begin transaction
SQL (0.6ms) INSERT INTO "venues" ("name", "address", "discount", "latitude", "longitude", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["name", "SPICEBOX"], ["address", "33 Pell St, New York, NY 10013, United States"], ["discount", "10% OFF with Student ID"], ["latitude", 40.714831], ["longitude", -73.998628], ["created_at", "2015-11-03 06:12:52.400643"], ["updated_at", "2015-11-03 06:12:52.400643"]]
SQL (0.2ms) INSERT INTO "venue_tags" ("tag_id", "venue_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["tag_id", 2], ["venue_id", 11], ["created_at", "2015-11-03 06:12:52.404715"], ["updated_at", "2015-11-03 06:12:52.404715"]]
SQL (0.2ms) INSERT INTO "tags" ("name", "created_at", "updated_at") VALUES (?, ?, ?) [["name", ""], ["created_at", "2015-11-03 06:12:52.408821"], ["updated_at", "2015-11-03 06:12:52.408821"]]
SQL (0.1ms) INSERT INTO "venue_tags" ("venue_id", "tag_id", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["venue_id", 11], ["tag_id", 9], ["created_at", "2015-11-03 06:12:52.411692"], ["updated_at", "2015-11-03 06:12:52.411692"]]
(1.4ms) commit transaction
=> true
However, when take off the 'validate uniqueness of name', I can save it
检查数据库中的名称,看看它是否已经存在。 既然你能保存记录,你的代码应该没问题。
要查看为什么记录不想保存,您可以询问您尝试保存的对象的错误。您可以在您的撬动控制台中执行此操作。
@venue.save
...
=> false
@venue.errors.messages
=> ...
它可能会告诉您您已经有同名的记录。如果是这种情况,那么您的记录没有保存是有道理的。
您可能应该添加一个验证 :presence 到标签名称。您的数据库中似乎有一个没有名称的标签,当您添加另一个没有名称的标签时,它不是唯一的并且不会通过验证。
查看表单或强参数,了解该值是如何被清除的(如果是的话)。
如果它是空白的,因为它是故意以这种方式提交的,如果它是空白的,你可以忽略它。
accepts_nested_attributes_for :tags, allow_destroy: true, :reject_if => lambda { |a| a[:name].blank? }