Ruby on rails 如何通过rails 3.2中的关联在中创建记录

Ruby on rails 如何通过rails 3.2中的关联在中创建记录,ruby-on-rails,ruby-on-rails-3.2,rails-activerecord,Ruby On Rails,Ruby On Rails 3.2,Rails Activerecord,我有两个模型(用户和事件),具有多个has_多个直通关联,其中我当前的关联是通过以下逻辑实现的: 用户可以通过EventGroup参与许多活动 事件通过EventGroup拥有多个用户 用户可以通过Eventgroup喜欢许多事件 Event通过Eventgroup拥有许多用户喜欢的内容 型号: class User has_many :event_groups has_many :events,:through => :event_groups has_many :event_li

我有两个模型(用户和事件),具有多个has_多个直通关联,其中我当前的关联是通过以下逻辑实现的:

  • 用户可以通过EventGroup参与许多活动
  • 事件通过EventGroup拥有多个用户
  • 用户可以通过Eventgroup喜欢许多事件
  • Event通过Eventgroup拥有许多用户喜欢的内容
  • 型号:

    class User
     has_many :event_groups
     has_many :events,:through => :event_groups
     has_many :event_likes,:through => :event_groups,:class_name => "Event"
    end
    
    class Event
      has_many :event_groups
      has_many :users,:through => :event_groups
      has_many :user_likes,:through => :event_groups,:class_name => "User"
    end
    
    class EventGroup
      belongs_to :user
      belongs_to :event
      belongs_to :user_like,:class_name => "User"
      belongs_to :event_like,:class_name => "Event"
    end
    
    user_id
    event_id
    user_like_id
    event_like_id
    
    事件组列:

    class User
     has_many :event_groups
     has_many :events,:through => :event_groups
     has_many :event_likes,:through => :event_groups,:class_name => "Event"
    end
    
    class Event
      has_many :event_groups
      has_many :users,:through => :event_groups
      has_many :user_likes,:through => :event_groups,:class_name => "User"
    end
    
    class EventGroup
      belongs_to :user
      belongs_to :event
      belongs_to :user_like,:class_name => "User"
      belongs_to :event_like,:class_name => "Event"
    end
    
    user_id
    event_id
    user_like_id
    event_like_id
    
    设置关联后,我尝试使用以下代码创建关联记录:

    user = User.first
    user.event_likes << Event.first  
    user.save
    

    请告诉我执行此操作的正确方法。

    使用.where格式,您可以传递类似.where的字符串(“event\u groups.user\u like\u id=?”,17)以限定联接的标记表

    例如:

    User.joins(:event_groups).where("event_groups.user_like_id = ?", 17)
    

    我不确定,但您可能需要在您的
    中定义
    的反向关系:

    class User
     #...
     has_many :event_likes, :through => :event_groups, :inverse_of => :user_likes, :class_name => "Event"
    end
    
    class Event
      #...
      has_many :user_likes, :through => :event_groups, :inverse_of => :event_likes, :class_name => "User"
    end
    

    请参阅

    一章,在我看来,您正在尝试建模两个多对多关系(用户参与事件和用户喜欢事件),这两个关系是一个关系中不同的概念。我在这里假设,用户可以在不喜欢的情况下参与活动,反之亦然。在这种情况下,将
    EventGroup
    建模为仅表示参与关系,并创建另一个
    EventLikes
    模型来表示喜欢。两个表中的列是相同的,但表示不同的关系。之后,将事件添加到其中一个(事件或事件类)应该会起作用

    我通过关系模型在相同的模型(用户)之间创建类似的关系, 我的代码:

    有很多:关系,外键:“追随者id”,依赖::销毁

    有很多:跟踪用户,通过::关系,源::跟踪

    有很多:反向关系,外键:“跟随id”,
    类名:“关系”,
    依赖::销毁


    有很多:followers,through::reverse\u relationships,source::follower

    我不是问检索记录的步骤,我想知道正确添加记录的方法。我得到了您的回答:“但是我无法通过事件获取用户记录。用户喜欢”。您使用了
    get
    ,这是
    get
    查询,而不是
    add
    。问题是类用户id始终为零,因此无法通过您的查询检索记录在添加记录时,不可能使用相反的id来更新事件id而不是类事件id