我正在尝试创建一个简单的社交网络,因此创建了以下UserFriendship
类,它基本上有一个用户和朋友(也是一个用户)。
当我呼叫UserFriendship.request(users(:user1), users(:user2))
时,它应该向数据库(user1,user2)和(user2,user1)添加两个友谊。
但是,不是将完整的数据集添加到数据库中。友谊1不完整。我不明白为什么create
在友谊2中工作但在友谊中不起作用。
这里的友谊1& friendship2创建后:
<UserFriendship id: nil, user_id: 755095536, friend_id: 204282540, created_at: nil, updated_at: nil, state: "pending">
<UserFriendship id: 980190966, user_id: 204282540, friend_id: 755095536, created_at: "2013-12-08 20:04:51", updated_at: "2013-12-08 20:04:51", state: "requested">
UserFriendship id:
,created_at:
和updated_at:
在Friendship1
中为零,但在Friendship2
class UserFriendship < ActiveRecord::Base
belongs_to :user
belongs_to :friend, class_name: 'User', foreign_key: 'friend_id'
scope :accepted, -> { where(state: 'accepted') }
scope :pending, -> { where(state: 'pending') }
validates :friend_id, uniqueness: { scope: :user_id }
after_destroy :destroy_mutual_friendship!
state_machine :state, :initial => :pending do
after_transition on: :accept, do: [:send_acceptance_email, :update_mutual_friendship!]
state :requested
event :accept do
transition any => :accepted
end
end
def self.request(user1, user2)
transaction do
friendship1 = create(user: user1, friend: user2, state: 'pending')
friendship2 = create(user: user2, friend: user1, state: 'requested')
friendship1.send_request_email unless friendship1.new_record?
friendship1
end
end
...
end
答案 0 :(得分:1)
在您的交易中使用create!
代替create
。 bang变体在失败时抛出异常,导致事务回滚并让您更好地了解失败的原因。
答案 1 :(得分:1)
friendship1
未被保存,这意味着它可能未通过您的验证,即这两个用户之间的友谊尚不存在。