Я понимаю, что это, вероятно, очень простой вопрос, но я провел несколько дней, возвращаясь к нему, и по какой-то причине Google мне просто не помогает. (Я думаю, что часть проблемы в том, что я такой новичок, что не знаю, что спросить...) Я также просмотрел Ruby Cookbook O'Reilly и API Rails, но я все еще застрял в этом вопросе. . Я нашел некоторую информацию о полиморфных отношениях, но похоже, что это не то, что мне нужно (хотя дайте мне знать, если я ошибаюсь).
Я пытаюсь настроить руководство Майкла Хартла, чтобы создать приложение блога с пользователями, статьями и комментариями (без использования шаблонов) . Я хочу, чтобы комментарии принадлежали как пользователю, так и статье.
Моя основная проблема: я не могу понять, как получить идентификатор текущей статьи в контроллере комментариев.
Отношения для класса User:
class User < ActiveRecord::Base
has_many :articles
has_many :comments, :dependent => :destroy
Отношения для класса Article:
class Article < ActiveRecord::Base
belongs_to :user
has_many :comments, :dependent => :destroy
Отношения для класса Comment:
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :article
Это мой CommentController (страница about отображается в else просто для того, чтобы сделать это очевидным для меня на данный момент):
class CommentsController < ApplicationController
before_filter :authenticate, :only => [:create, :destroy]
def new
@comment = Comment.new
end
def create
@article = Article.find(params[:id])
@comment = current_user.comments.build(params[:comment])
@comment.article_id = @article.id
if @comment.save
flash[:success] = "Comment created!"
redirect_to '/contact'
else
render '/about'
end
end
def destroy
end
end
Когда я вхожу в систему как пользователь и пытаюсь создать комментарий к статье, я получаю сообщение «Не удалось найти статью без идентификатора». Я не могу понять, как получить идентификатор текущей статьи в контроллере комментариев.
Спасибо и дайте мне знать, если вам нужно, чтобы я разместил больше кода.
Изменить: вот мой частичный файл _comment_form.html.erb, который я вызываю в нижней части представления show.html.erb для статьи:
<%= form_for ([@article, @article.comments.build]) do |f| %>
<div class="field">
<%= f.text_area :content %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
<% end %>
Также вот show.html.erb для статьи:
<heading>
<h1><%= @article.heading %></h1>
<p>Posted <%= time_ago_in_words(@article.created_at) %> ago by <%= @article.user.name %></p>
</heading>
<p><%= @article.content %></p>
<footer><p>
<% unless @article.comments.empty? %>
<%= @article.comments.count %>
<% end %> comments</p></footer>
<% unless @article.comments.empty? %>
<%= render @comments %>
<%= will_paginate @comments %>
<% end %>
<%= render 'shared/comment_form' %>