如何删除与已停用用户相关的所有帖子?我目前正在使用此代码:
<% @questions.each do |question| %>
<div class="pad">
<div class="forum-question">
<p><%= link_to question.title, question %>
<br/><span class="pull-right"><%= time_ago_in_words(question.created_at) %> ago, by
<%= question.user.username %>
<% end %>
但问题是,如果用户决定取消他的帐户,循环将失败并导致未定义的错误,因为我显示用户的用户名。为了避免在开发应用程序时获取它,我改为:
<% @questions.each do |question| %>
<div class="pad">
<div class="forum-question">
<p><%= link_to question.title, question %>
<br/><span class="pull-right"><%= time_ago_in_words(question.created_at) %> ago, by
<% if @user.blank? %>
deleted user
<% else %>
<%= question.user.username %>
<% end %></span></p>
</div>
</div>
<% end %>
有没有办法编写if语句,当他们按下“取消我的帐户”按钮时删除所有用户的帖子?
答案 0 :(得分:0)
你可以做以下方法,请创建路线。如果需要,将方法名称替换为必要的更改, current_user.id 只能在具有Devise gem或使用当前用户的id替换时使用。我假设您有一个用户有很多帖子关联,如果有,
在视图文件中,
<%= link_to "Delete my account", delete_posts_path(current_user.id) %>
在控制器中,
def delete_posts
user_id = params[:id]
user = User.find_by_id(user_id)
user.posts.destroy_all
redirect_to root_path
end
在路线中,
get 'delete_posts', to: 'controller_name#delete_posts'
在上述路线中插入您的控制器名称。
答案 1 :(得分:0)
听起来您希望用户与他们发布的问题之间的关联有dependent: :destroy
选项。我假设它是这样的:
class User
has_many :questions
如果您查看various options for dependent
on a has_many
,可以将其设置为:
has_many :questions, dependent: :destroy
其中,来自文档:
控制关联对象在其所有者被销毁时会发生什么:
:destroy
导致所有相关对象也被销毁
这意味着当您的用户实例被销毁时,问题也将被销毁。
您是否确实要删除已取消其帐户的用户的所有问题是另一回事。如果它们有用,那么删除它们将是一种耻辱,但这完全是一个不同的问题。