基本上,我有一个用户模型,和一个友谊连接表,使用户彼此的朋友。
class User < ApplicationRecord
has_many :friendships
has_many :friends, through: :friendships, class_name: 'User'
class Friendship < ApplicationRecord
belongs_to :user
belongs_to :friend, class_name: 'User'
很简单,对吧?现在,我为每个用户的编辑页面提供了一个集合复选框,以确定谁是他们的朋友:
<%= f.collection_check_boxes( :friend_ids, @other_users, :id, :full_name) do |b| %>
<%= b.label(class:"form-check-label") { b.check_box(class: 'form-check') + b.text } %>
<% end %>
当我在Timmy的编辑页面上检查John时,我想创建两个连接表,一个将User(Timmy)链接到Friend(John),另一个将Friend链接到User。目前,只有一个表正在创建:
Friendship Create (0.7ms) INSERT INTO `friendships` (`user_id`, `friend_id`, `created_at`, `updated_at`) VALUES (48, 49, '2023-09-21 14:24:36', '2023-09-21 14:24:36')
我尝试在友谊模型中添加回调
after_create do |ship|
friend_friendship = Friendship.create(user_id: ship.friend_id, friend_id: ship.user_id)
end
但显然失败了,形成了一个死循环!
我如何创建朋友到用户的连接没有大惊小怪?谢谢
1条答案
按热度按时间ecfsfe2w1#
accept_nested_attributes是一个可以实现这个功能的东西。您还需要创建一个连接模型。
让我们看一个例子,以了解基本的-
关联类Friend将通过友谊_id和user_id加入用户和友谊: