2016-03-16 3 views
0

В моем приложении Rails у меня есть модель комментариев, модель пользовательских моделей и модель сказок. Для каждой публикации в темах у меня есть комментарии, отправленные зарегистрированными пользователями. Проблема здесь в том, что каждый другой зарегистрированный пользователь может удалить комментарии другого пользователя. Мне нужна такая функциональность, что только пользователь, создавший комментарии, может удалить его ,Как разрешить пользователям удалять свои собственные комментарии, а не другие

Мой user.rb здесь

class User < ActiveRecord::Base 
has_one :profile, dependent: :destroy 
has_many :tales, dependent: :destroy 
end 

Мой comment.rb здесь

class Comment < ActiveRecord::Base 
belongs_to :tale 
end 

Мой tale.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

Вы должны добавить user_id в таблицу комментариев, а затем только сможете выполнить то же самое. – LHH

ответ

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 
+0

У него нет user_id в таблице комментариев. Проверьте его вопрос – LHH

+0

Я пробовал это ... добавление user_id в комментарии и ваш код выше. Но когда я проверяю комментарии, он не выбирает идентификатор пользователя @Tom Rossi –

+0

@MaheshMesta вы присваиваете user_id комментарию, когда он создан? –

0

Добавить use_id в комментарии таблица если нет

add_column :comments, :user_id, :integer 

в вашем поле зрения файл положить следующий con дитион. Удалить ссылку будет отображаться только пользователю, добавившему комментарий.

<% 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 %> 
+0

Добавлен user_id для комментариев модели и вышеприведенного кода .It не выбирает комментарий user_id и показывает nill после создания комментария @LHH –

Смежные вопросы