我运行一个网站,在那里我创建用户帐户,并发布他们的帖子。现在我开始公开注册,我已经设计了电子邮件注册和Omniauth注册。它们各自工作得很好。
然而,现在我注意到,人们在Twitter上注册,尽管他们存在,正如我早些时候添加的。如何合并这些帐户?
场景:
作为管理员,我通过电子邮件创建了一个设计用户(用户名: joebutton,email:mywebsite+joebutton@gmail.com (这里有一个小gmail黑客,因为我没有乔的电子邮件,设计需要电子邮件))
2-作为管理员,我提交了用户joebutton的帖子
3-稍后,Joe Button通过Twitter注册,用户名为joe_button。
4-现在有两个乔按钮joebutton (由管理员添加并有帖子)和通过Twitter注册的真正的joe_button。
我如何合并这两个帐户,这样乔可以通过电子邮件或推特登录并访问他的帖子(编辑,删除)?
发布于 2018-02-06 01:28:13
使用此代码显示由实际用户创建的所有用户。对于每个别名,您都可以选择一个别名(由您创建的用户),并调用一个方法将它们合并。合并它们意味着将帖子从您的用户重新分配到新用户,并摧毁您的用户(只留下真正的用户创建的用户,以及您编写的帖子)。如果您对用户有更多的依赖关系,这是不够的。
小心处理:)。备份你的数据库。此代码中的错误可能会删除错误的用户。
UsersController
def aliases
#Users created by real users (twitter omniauth)
@users = User.where.not("email LIKE ?", "mywebsite%")
#Users created by you
@possible_aliases = User.where("email LIKE ?", "mywebsite%")
render 'aliases'
end
def merge
if params[:id] != params[:second_id]
# User created by real user (twitter omniauth)
@user = User.find_by(id: params[:id])
if @user
@user.merge_with params[:second_id] # Merge with user create by you
end
end
head :ok
end用户模型
def merge_with other_id
# User created by you
@other = User.find_by(id: other)
if @other
# Assign your posts to this user
@other.posts.update_all(:user_id => self.id)
@other.destroy
end
end别名视图
<h4>Users</h4>
<table class="table table-hover table-condensed">
<tr>
<th>Name</th>
<th>Email</th>
<th>Merge with</th>
</tr>
<%= render partial: 'review_user', collection: @users, as: :user %>
</table>review_user局部视图
<tr>
<td><%= user.name %></td>
<td><%= user.email %></td>
<td><%= select_tag 'user_id', options_from_collection_for_select(@possible_aliases, "id", "name",
user.id), :class => "review_user", prompt: "Select alias",
:'data-url' => url_for(:controller=>"users", :action=>"merge", :id => user.id)
</td>
</tr>Javascript
#This will merge and edit users as you select them.
#You may want to use a button instead (safer)
$(document).on("change", ".review_user", function() {
$el = $(this);
other = $el.val()
url = $el.data("url");
$.post (url, { other_id: other }, function(alias) {});
});https://stackoverflow.com/questions/48631233
复制相似问题