我的用户有帖子。
<p id="notice"><%= notice %></p>
<h1>Listing Posts</h1>
<table>
<thead>
<tr>
<th>Comment</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @posts.each do |post| %>
<tr>
<td><%= post.content %></td>
<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= link_to 'New Post', new_user_post_path %>
在控制器中
def destroy
@user = @post.user
@post.destroy
respond_to do |format|
format.html { redirect_to user_posts_url(@user), notice: 'Post was successfully destroyed.' }
format.json { head :no_content }
end
end
实施链接和控制器操作以销毁特定用户的所有帖子的正确方法是什么?
修改 配置/ routes.rb中
resources :users do
resources :posts, shallow: true
end
编辑2:
resources :users do
#resources :posts, shallow: true
resources :posts, shallow: true do
delete :destroy_all, on: collection
end
end
给出no block given (yield)
错误
aww my bad ..刚发现错误..忘了添加:收藏
答案 0 :(得分:2)
如果需要删除选定的帖子,我只会传递一组post
ID 。如果您要删除特定用户的所有帖子,那么我将采用以下方式:
<强>配置/ routes.rb中强>
resources :users do
resources :posts do
delete :destroy_all, on: :collection
end
end
此处,on: :collection
表示该路由适用于帖子的集合;因此,路线看起来像这样:
/users/:user_id/posts/destroy_all
您可以在Rails指南中阅读有关添加成员和收集路由的更多信息:
http://guides.rubyonrails.org/routing.html#adding-more-restful-actions
应用/控制器/ posts_controller.rb 强>
def destroy_all
user = User.find(params[:user_id])
user.posts.destroy_all
# redirect somewhere
end
应用/视图/帖/ index.html.erb 强>
<%= link_to(
"Delete all posts!",
destroy_all_user_posts_path,
method: :delete
) %>
如果您要删除current_user
的所有帖子,请按以下方式修改:
<强>配置/ routes.rb中强>
resources :posts do
delete :destroy_all, on: :collection
end
应用/控制器/ posts_controller.rb 强>
def destroy_all
current_user.posts.destroy_all
# redirect somewhere
end
应用/视图/帖/ index.html.erb 强>
<%= link_to(
"Delete all posts!",
destroy_all_posts_path,
method: :delete
) %>
希望有所帮助。
答案 1 :(得分:0)
我会创建一个单独的控制器方法,接受一个post id数组。
<强> posts_controller.rb 强>
def destroy_all
posts = Post.where(:id => params[:post_ids])
posts.delete_all
redirect_to :back
end
您还需要向view方法提供ID。
<强> posts_controller.rb 强>
def index
...
@posts_ids = Post.find(... how ever you need to select all posts...).pluck(:id)
...
end
<强>视图/帖/ index.html.erb 强>
...
<%= link_to destroy_all_posts_path(:post_ids => @posts_ids), :method => :destroy %>
...
您还需要提供路线。
<强>的routes.rb 强>
resources :users do
resources :posts
delete :destroy_all
end
end
那应该是它:)
答案 2 :(得分:0)
您可以使用:
def destory_posts(user)
user.posts.destroy_all
render :nothing => true
end
将此方法添加到routes
文件中。
从您要删除帖子的位置创建destory_posts_path(current_user)
之类的链接。