在我的Rails应用程序中,我有一个评论模型,一个设计用户模型和一个故事模型。对于每个故事帖,我都有登录用户发布的评论。这里的问题是每个登录用户都可以删除其他用户的评论。我想要一个功能,只有创建评论的用户才能删除它
我的user.rb就在这里
class User < ActiveRecord::Base
has_one :profile, dependent: :destroy
has_many :tales, dependent: :destroy
end
我的评论.rb就在这里
class Comment < ActiveRecord::Base
belongs_to :tale
end
我的故事.rb就在这里
class Tale < ActiveRecord::Base
belongs_to :user
has_many :comments, dependent: :destroy
belongs_to :category
end
我的routes.rb如下
Rails.application.routes.draw do
get 'tales/index'
devise_for :users, controllers: { registrations: "registrations" }
resources :profiles
resources :tales do
resources :comments
end
resources :categories
authenticated :user do
root "tales#index"
end
unauthenticated :user do
get "/" => "tales#index"
end
end
我的评论控制器在这里:
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@tale = Tale.find(params[:tale_id])
@comment = @tale.comments.create(comment_params)
redirect_to tale_path(@tale)
end
def destroy
@tale = Tale.find(params[:tale_id])
@comment = @tale.comments.find(params[:id])
@comment.destroy
end
private
def comment_params
params.require(:comment).permit(:name, :body, :tale_id)
end
end
我的故事/节目页面摘录添加评论:
<div id="comments">
<h2><%= @tale.comments.count %> Comments</h2>
<%= render @tale.comments %>
<h3>Add a comment:</h3>
<%= render "comments/form" %>
</div>
</div>
我的_comment.html.erb就在这里
<div class="comment clearfix">
<div class="comment_content">
<p class="comment_name"><strong><%= comment.name %></strong></p>
<p class="comment_body"><%= comment.body %></p>
<p class="comment_time"><%= time_ago_in_words(comment.created_at) %>
Ago</p>
</div>
<% if user_signed_in? %>
<p><%= link_to 'Delete', [comment.tale, comment], method: :delete, data:
{ confirm: 'Are you sure?' } %></p>
<% end %>
</div>
我认为用户和评论之间没有联系,我没有正确的方法在这里做。可以有人指导我这样做,这样我就可以不使用任何宝石。
答案 0 :(得分:1)
您似乎与Comment
和User
之间没有关系。假设您为每条评论存储Comment
,则在user_id
课程中需要这样的内容:
belongs_to :user
然后在您的CommentsController
destroy
方法中应该是这样的:
def destroy
# Only the comments posted by that user will be returned
@comment = @user.comments.find(params[:id])
@comment.destroy
end
答案 1 :(得分:0)
如果没有
,请在评论表中添加use_id
add_column :comments, :user_id, :integer
在您的视图文件中放入以下条件。删除链接仅对添加了评论的用户可见。
<% if user_signed_in? && current_user.id == comment.user_id %>
<p><%= link_to 'Delete', [comment.tale, comment], method: :delete, data:
{ confirm: 'Are you sure?' } %></p>
<% end %>