У меня проблемы с созданием формы для комментариев, которую я делаю, используя полиморфные отношения через «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
Это мой первый пост, так что дайте мне знать, если я смогу улучшить вопрос! Большое спасибо.