Rails 3 - «неопределенный метод» comments_path »Ошибка построения общей формы для комментариев с использованием комментируемой полиморфной ассоциации - PullRequest
2 голосов
/ 17 августа 2011

У меня проблемы с созданием формы для комментариев, которую я делаю, используя полиморфные отношения через «commentable». Теперь я могу отображать комментарии (если я их получаю), поэтому я думаю, что я действительно близок. Форма комментария также отображается, однако, когда я иду, чтобы отправить его, не удается.

Я отправлен в "/ comments" и получаю следующую ошибку:

NoMethodError in CommentsController#create 

undefined method `comments' for nil:NilClass

Application Trace
app/controllers/comments_controller.rb:5:in `create' (  @comment = @commentable.comments.build(params[:comment]) )

** Прежде всего, почему он посылает меня в «/ комментарии» ?? Это не кажется правильным.

Вот соответствующий код, дайте мне знать, если вам нужно больше.

Модель:

class Comment < ActiveRecord::Base
  belongs_to :commentable, :polymorphic => true

  default_scope :order => 'comments.created_at DESC'
end

class Track < ActiveRecord::Base

  has_many :comments, :as => :commentable 
  ...
end

представление (комментарии / форма) - это затем отображается как часть в Track # show

<% form_for [@commentable, @comment] do |f| %>
  <%= f.error_messages %>

  <p>
    <%= f.label :name %><br />
    <%= f.text_area :name %>
  </p>

  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>

  <p><%= f.submit "Submit" %></p>
<% end %>

Контролер комментариев:

def create  
  @commentable = find_commentable  
  @comment = @commentable.comments.build(params[:comment])  
  if @comment.save  
    flash[:notice] = "Successfully saved comment."  
    redirect_to :id => nil  
  else  
    render :action => 'new'  
  end  
end

def new
  @comment = Comment.new
end

private

def find_commentable  
  params.each do |name, value|  
    if name =~ /(.+)_id$/  
      return $1.classify.constantize.find(value)  
    end  
  end  
  nil  
end

маршруты:

resources :tracks, :has_many => :comments
resources :comments

Это мой первый пост, так что дайте мне знать, если я смогу улучшить вопрос! Большое спасибо.

1 Ответ

0 голосов
/ 18 августа 2011

Я не вижу ничего плохого в этом коде. Думаю, вы забыли установить переменную @track или @commentable где-нибудь, где вы вызываете комментарии к ней.

Попробуйте проверить трассировку ошибок приложения, чтобы увидеть, где это происходит.

...