Я пытался исправить ошибку, связанную с использованием драгоценного камня Ancestry для комментариев к моему приложению для Rails 4. Я использовал railscast episode 262 в качестве руководства. Однако, в отличие от эпизода, моя модель модель является вложенным ресурсом внутри другой модели. Прежде чем идти дальше, я поставлю необходимый код для справки. Если вы хотите сразу же прочитать ошибку, это упоминается сразу после всех фрагментов кода.Ancestry Gem для вложенных комментариев с Rails, вызывающих неопределенную ошибку метода
соответствующие модели:
class Comment < ActiveRecord::Base
has_ancestry
belongs_to :user
belongs_to :scoreboard
end
class Scoreboard < ActiveRecord::Base
#scoreboard model is like an article page on which users can post comments
belongs_to :user
has_many :teams, dependent: :destroy
has_many :comments, dependent: :destroy
end
Соответствующий код в файле маршрута:
resources :scoreboards do
resources :comments
resources :teams, only: [:edit, :create, :destroy, :update]
end
Метод Scoreboards Контроллер для страницы, на которой можно оставлять комментарии:
def show
@scoreboard = Scoreboard.find_by_id(params[:id])
@team = @scoreboard.teams.build
@comment = @scoreboard.comments.new
end
Контроллер комментариев:
class CommentsController < ApplicationController
def new
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@comment = @scoreboard.comments.new(:parent_id => params[:parent_id])
end
def create
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@comment = @scoreboard.comments.new comment_params
if @comment.save
redirect_to scoreboard_url(@comment.scoreboard_id)
else
render 'new'
end
end
private
def comment_params
params.require(:comment).permit(:body, :parent_id).merge(user_id: current_user.id)
end
end
Я буду включать миграцию на родословной самоцвет, если какие-либо ошибки были сделаны на том, что:
class AddAncestryToComments < ActiveRecord::Migration
def change
add_column :comments, :ancestry, :string
add_index :comments, :ancestry
end
end
Следующий код показывает код вида:
Табло # показать Вид который дает меня ошибка в последней строке:
<div class= "comment-section">
<%= form_for [@scoreboard, @comment] do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_area :body, class: "comment-field" %>
<%= f.hidden_field :parent_id %> #is it needed to include this here? because this form is for new comments not replies
<%= f.submit "Join the discussion...", class: " comment-button btn btn-primary" %>
<% end %>
<%= nested_comments @scoreboard.comments.reject(&:new_record?).arrange(:order => :created_at) %>
</div>
The (комментарии частичный) _comment.html.erb Вид:
<div class=" comment-div">
<p> Posted by <%= link_to "#{comment.user.name}", comment.user %>
<%= time_ago_in_words(comment.created_at) %> ago
</p>
<div class="comment-body">
<%= comment.body %>
<%= link_to "Reply", new_scoreboard_comment_path(@scoreboard, comment, :parent_id => comment) %>
</div>
</div>
Вспомогательный метод для визуализации комментариев:
def nested_comments(comments)
comments.map do |comment, sub_comment| #the comments.map also gives me an error if I choose to render the comments without the .arrange ancestry method
render(comment) + content_tag(:div, nested_comments(sub_comment), class: "nested_messages")
end.join.html_safe
end
new.html.erb для комментариев, которые один перенаправляются для ответов сформировать представление:
<%= form_for [@scoreboard, @comment] do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.text_area :body, class: "comment-field" %>
<%= f.hidden_field :parent_id %>
<%= f.submit "Join the discussion...", class: " comment-button btn btn-primary" %>
<% end %>
после создания табло, я перенаправлен на страницу показа, где я получаю следующую ошибку:
undefined method `организовать 'for []: Array
Несмотря на то, что массив комментариев пуст, я получаю ту же ошибку, если она не была. Я пробовал .subtree.arrange, но это дает мне ту же ошибку. Кроме того, в документации по предкам говорилось, что .arrange работает только с классами. Я не знаю, что это значит. Я был бы признателен за некоторую помощь в том, чтобы заставить страницу работать, чтобы комментарии отображались правильно с ответами после их родительских комментариев. Если это неправильный подход для комментариев с резьбой (ответы и все), я был бы признателен за некоторое руководство по дальнейшему исследованию.
Я пытался выяснить эту ошибку в течение 4-х дней. Вы решили это через 5 минут. Спасибо огромное! – kpaul
Cheeky upvote from me –