Ruby on rails 保存时Rails回滚事务
当我试图保存@list时,在我的list\u控制器中撬动之后,我一直遇到一个“回滚事务”错误 我使用的是嵌套表单,当我打开@list.invites时,它显示invite.id为nil(但电子邮件在那里)。我想知道这是不是原因Ruby on rails 保存时Rails回滚事务,ruby-on-rails,nested-forms,Ruby On Rails,Nested Forms,当我试图保存@list时,在我的list\u控制器中撬动之后,我一直遇到一个“回滚事务”错误 我使用的是嵌套表单,当我打开@list.invites时,它显示invite.id为nil(但电子邮件在那里)。我想知道这是不是原因 [3] pry(#<ListsController>)> @list.invites => [#<Invite:0x007f91de392e30 id: nil, accepted: nil, exp_date: nil, e
[3] pry(#<ListsController>)> @list.invites
=> [#<Invite:0x007f91de392e30
id: nil,
accepted: nil,
exp_date: nil,
email: "sldkfjsdf@email.com",
invite_code: nil,
list_id: nil,
user_id: nil,
created_at: nil,
updated_at: nil>]
还有我的表格
<%= form_for(@list) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %><br>
Invites:
<%= f.fields_for :invites do |invite| %>
<%= invite.label :email %>
<%= invite.text_field :email %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
邀请:
下面是我在pry中尝试@list.save时出现的错误
pry(#<ListsController>)> @list.save
(0.1ms) begin transaction
(0.1ms) rollback transaction
pry(#)>@list.save
(0.1ms)开始事务处理
(0.1ms)回滚事务
任何帮助都将不胜感激!谢谢大家! 问题是我的has\u many属于用户和Invite之间的关系。发送邀请时,如果系统中存在电子邮件,则为拥有该电子邮件的用户分配该邀请。在列表创建时,如果邀请电子邮件不属于拥有帐户的人,则没有用户id可分配给新邀请。我必须弄清楚我将如何实现这一点,但最初的错误已经修复。您能展示一下您的模型吗?这看起来您可能需要在您的关系上设置
inverse\u of
选项。这可能是因为当所有这些模型都试图保存时,由于它们不知道彼此正在被创建,因此验证失败inverse\u of
让Rails知道关系并保存事务。我刚刚用邀请模型更新了问题。我现在来研究期权的逆问题。好的,我想我已经解决了问题。当我删除了用户和Invite之间的has_many和allowen_to关系时,它起到了作用。现在,我正试图找出如何保持这种关系,因为我需要用户。邀请来确定谁被邀请
class Invite < ApplicationRecord
belongs_to :list
belongs_to :user
end
create_table "invites", force: :cascade do |t|
t.boolean "accepted"
t.datetime "exp_date"
t.string "email"
t.string "invite_code"
t.integer "list_id"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "lists", force: :cascade do |t|
t.string "name"
t.string "list_type"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "admin_id"
end
<%= form_for(@list) do |f| %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %><br>
Invites:
<%= f.fields_for :invites do |invite| %>
<%= invite.label :email %>
<%= invite.text_field :email %>
<% end %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
pry(#<ListsController>)> @list.save
(0.1ms) begin transaction
(0.1ms) rollback transaction