Ruby rails 为 Post 的模型实施 "repost" 操作
Ruby on rails implementing "repost" action for Post's model
我有一个 User
和 Post
模型与关联 one-to-many
。我试图实现一个 repost 动作,通过 table reposts
.
添加一个 link has_and_belongs_to_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);
并按修改日期排序。 repost类似排序,从中有一种情况是repost在中间feed.
2) 无需额外努力,关注者看不到 reposts 用户。
这些问题可以通过需要快速的辅助数组来解决,但它看起来很荒谬且不是最佳解决方案。
我怎样才能摆脱困境?
P.S。我觉得可以参考在同一个字段,另一个对象上的Post
模型中的字段"Content"找到解决方案。然后 repost 动作将不需要一个单独的 table 并且只包含一个新的 Post
对象和一个指向原始 post 内容的指针。但是我不知道如何在 Ruby on Rails.
中执行此操作
感谢您的帮助!
我更正如下:
1) 在 Post
模型中添加了一个新字段 repost_id
并引用了你自己:
has_many: reposts, class_name: "Post", foreign_key: "repost_id", dependent:: destroy;
(与模型的关系 User
未更改)
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 的路由和验证创建)
结果是一个正确的行为动作模型 post 具有依赖关系并在 Feed 中正确显示。但遗憾的是,这种方法涉及在 table Posts
字段中的 "Content" 中存储重复数据。
我有一个 User
和 Post
模型与关联 one-to-many
。我试图实现一个 repost 动作,通过 table reposts
.
has_and_belongs_to_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);
并按修改日期排序。 repost类似排序,从中有一种情况是repost在中间feed.
2) 无需额外努力,关注者看不到 reposts 用户。
这些问题可以通过需要快速的辅助数组来解决,但它看起来很荒谬且不是最佳解决方案。
我怎样才能摆脱困境?
P.S。我觉得可以参考在同一个字段,另一个对象上的Post
模型中的字段"Content"找到解决方案。然后 repost 动作将不需要一个单独的 table 并且只包含一个新的 Post
对象和一个指向原始 post 内容的指针。但是我不知道如何在 Ruby on Rails.
感谢您的帮助!
我更正如下:
1) 在 Post
模型中添加了一个新字段 repost_id
并引用了你自己:
has_many: reposts, class_name: "Post", foreign_key: "repost_id", dependent:: destroy;
(与模型的关系 User
未更改)
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 的路由和验证创建)
结果是一个正确的行为动作模型 post 具有依赖关系并在 Feed 中正确显示。但遗憾的是,这种方法涉及在 table Posts
字段中的 "Content" 中存储重复数据。