Ruby on rails 保存时Rails回滚事务

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

当我试图保存@list时,在我的list\u控制器中撬动之后,我一直遇到一个“回滚事务”错误

我使用的是嵌套表单,当我打开@list.invites时,它显示invite.id为nil(但电子邮件在那里)。我想知道这是不是原因

[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