Ruby on rails RubyonRails实现;转售;针对邮政部门的行动';s模型

Ruby on rails RubyonRails实现;转售;针对邮政部门的行动';s模型,ruby-on-rails,ruby,activerecord,associations,Ruby On Rails,Ruby,Activerecord,Associations,我有一个User和Post模型,它与one-to-many关联。我试图实现一个repost操作,通过一个表repost添加一个链接has\u和\u besign\u to \u many 但我面临着以下挑战: 1) 按如下方式加载到提要的Post: followed_users="SELECT followed_id FROM relationships WHERE follower_id = :user "; replics_posts="SELECT micropost_id FROM r

我有一个
User
Post
模型,它与
one-to-many
关联。我试图实现一个repost操作,通过一个表
repost
添加一个链接
has\u和\u besign\u to \u many

但我面临着以下挑战:

1) 按如下方式加载到提要的Post:

followed_users="SELECT  followed_id FROM relationships WHERE follower_id = :user ";
replics_posts="SELECT micropost_id FROM replics_users WHERE user_id = (:user)"
reposts="SELECT post_id FROM reposts WHERE user_id = (:user)"

where("user_id IN(#{followed_users}) OR user_id= (:user) OR id IN(#{replics_posts}) OR id in (#{reposts})", user: user);
并按修改日期排序。重新排序类似的排序,其中有一种情况是在中间饲料重新发布。 2) 没有额外的努力,追随者看不到用户的回复

这些问题都可以通过辅助阵列来解决,需要快速,但它看起来荒谬且非最优解

我怎样才能摆脱这种局面

另外,我认为可以在同一个字段(另一个对象)的
Post
模型中的“Content”字段中找到解决方案。然后,repost操作将不需要单独的表,只包含一个新的
Post
对象,该对象带有指向原始Post内容的指针。但我不知道如何在RubyonRails中做到这一点


谢谢你的帮助

我更正如下:

followed_users="SELECT  followed_id FROM relationships WHERE follower_id = :user ";
replics_posts="SELECT micropost_id FROM replics_users WHERE user_id = (:user)"
reposts="SELECT post_id FROM reposts WHERE user_id = (:user)"

where("user_id IN(#{followed_users}) OR user_id= (:user) OR id IN(#{replics_posts}) OR id in (#{reposts})", user: user);
1) 在
Post
模型中添加了一个新字段
repost\u id
并引用您自己:

has_many: reposts, class_name: "Post", foreign_key: "repost_id", dependent:: destroy;
(与型号
用户的关系未更改)

2) 添加到
Post
的控制器方法
repost

  def repost
    orig_post=Micropost.find(params[:id]);
    if(orig_post)
      Micropost.create(user_id:current_user.id, 
        content: orig_post.content, 
        repost_id:orig_post.id);
      respond_to do |format|
        format.js
      end 
    end 
  end
(别忘了实现post的路由和验证创建)

结果是行为操作的正确模型与依赖项一起重新发布,并在提要中正确显示。但遗憾的是,这种方法需要在“内容”字段的表
Posts
中存储重复数据