Я пытаюсь сделать приложение в Rails 4.Rails 4 - удалить по полиморфному атрибуту
У меня есть модель модели и модель комментариев.
Ассоциации являются:
article.rb
has_many :comments, as: :commentable, dependent: :destroy
accepts_nested_attributes_for :comments
comment.rb
belongs_to :commentable, :polymorphic => true
В моих статьях показывают вид, у меня есть:
<div class="row">
<div class="col-sm-9">
<div class="intpol3" style="text-align: left; margin-left:60px; padding-top:50px">
<%= safe_join(@article.body.split("\r\n"), "<br />".html_safe) %>
</div>
</div>
<div class="col-sm-3">
<!-- placeholder for tags -->
</div>
</div>
<!-- if @article.user.full_name.present? -->
<!-- <div class="indexsubtext"> @article.user.full_name </div> -->
<!-- end -->
<div class="row">
<div class="col-xs-8">
</div>
<div class="col-xs-4">
<div class="formminor" style="margin-bottom:5%">
<%= link_to 'Edit', edit_article_path(@article) %> |
<%= link_to 'More from the blog', articles_path %>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<%= render :partial => 'comments/form', locals: {commentable: @article} %>
</div>
</div>
<div class="row">
<div class="col-xs-12">
<div class="intpol3">
<%= render :partial => 'comments/display', locals: {commentable: @article} %>
</div>
</div>
</div>
В моей комментарии отображение частичный, У меня есть:
<div class="row">
<div class="col-xs-11">
<% commentable.comments.each do | comment | %>
<div class="well">
<%= comment.opinion %>
<div class="commentattributionname">
<%= comment.user.full_name %>
</div>
<div class="commentattributiontitle">
<%= comment.user.formal_title %>
</div>
<div class="commentattributiondate">
<%= comment.created_at.try(:strftime, '%e %B %Y') %>
</div>
</div>
<div class="col-xs-1">
<%= button_to 'Delete', commentable.comment, :method => :delete %>
</div>
<% end %>
Это все работало нормально, пока я не попытался добавить кнопку, чтобы удалить комментарий. Модель комментариев является полиморфной.
У меня есть два контроллера для комментариев (после gorails.com учебника), первых статей :: комментариев контроллер, который имеет:
class Articles::CommentsController < CommentsController
before_action :set_commentable#, only: [:show, :edit, :update, :destroy]
private
# Use callbacks to share common setup or constraints between actions.
def set_commentable
@commentable = Article.find(params[:article_id])
end
end
Вторые комментарии контроллер, который имеет:
class CommentsController < ApplicationController
before_action :authenticate_user!
def create
@comment = Comment.new comment_params
@comment.user = current_user
@comment.commentable = @commentable
respond_to do |format|
if @comment.save
format.html { redirect_to @commentable }
format.json { render :show, status: :created, location: @comment }
else
format.html { render :new }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
def destroy
@comment.destroy
respond_to do |format|
format.html { redirect_to data_url }
format.json { head :no_content }
end
end
private
# Never trust parameters from the scary internet, only allow the white list through.
def comment_params
params.require(:comment).permit(:opinion)
end
end
Я хочу попытаться удалить комментарий, а не статью. Когда я пытаюсь это сделать, сообщение об ошибке говорит, что проблема уничтожения в контроллере комментариев является проблемой.
разрушающего действия в контроллере статьи является:
def destroy
before_action :authenticate_user!
authorize @article
@article.destroy
respond_to do |format|
format.json { head :no_content }
end
end
Сообщение об ошибке:
ActionController::UnknownFormat in ArticlesController#destroy
ActionController::UnknownFormat
respond_to строка выделена. Я не знаю, что означают эти слова - они автоматически вставлены, когда вы создаете контроллер, используя строительные леса. Тем не менее, я добавил реагировать форматировать к контроллеру, как:
respond_to :html, :son
Я не знаю, почему моя попытка удалить комментарий направляется на действия уничтожить в контроллере статьи.
Причины, имеющие два контроллера описаны в видео gorails по адресу: https://gorails.com/episodes/ комментарии-с-полиморфных-ассоциаций? автозапуск = 1. Я думаю, что ваши комментарии могут указывать на стилистическую разницу в подходе. Спасибо за подсказку на полиморфном пути. Я изучу это, чтобы узнать, смогу ли я решить проблему с этой идеей. – Mel
Возможно, вы захотите посмотреть ['DRY'] (https://en.wikipedia.org/wiki/Don%27t_repeat_yourself). –
Я не думаю, что в этом есть повторение. Спасибо, в любом случае. – Mel