当我尝试保存@list
时,我在Lists_Controllers中的pry之后一直遇到“回滚事务”错误我正在使用嵌套表单,当我撬开@ 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>]
这是我的列表控制器
class ListsController < ApplicationController
before_action :authenticate_user!
def new
@list = List.new
@list.invites.build
end
def create
@list = List.create(list_params)
@list.users << current_user
@list.admin_id = current_user.id
binding.pry
if @list.save
redirect_to @list
else
render :new
end
end
private
def list_params
params.require(:list).permit(:name, invites_attributes: [:email])
end
end
这是我的List.rb
class List < ApplicationRecord
has_many :lists_users
has_many :users, through: :lists_users
has_many :chores
has_many :invites
accepts_nested_attributes_for :invites , reject_if: proc { |attributes|
attributes['email'].blank? }
validates :name, presence: true
end
和我的邀请.rb
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
中尝试@ list.save时出现错误pry(#<ListsController>)> @list.save
(0.1ms) begin transaction
(0.1ms) rollback transaction
任何帮助将不胜感激!谢谢!
答案 0 :(得分:0)
问题是我和用户和邀请之间的has_many和belongs_to关系。发送邀请时,如果系统中存在电子邮件,则为拥有该电子邮件的用户分配邀请。在列表创建时,如果邀请电子邮件不属于具有帐户的某人,则没有user_id分配给新邀请。我必须弄清楚我将如何做到这一点,但原始错误是固定的。