Я понимаю, что это, вероятно, очень простой вопрос, но я потратил несколько дней, чтобы вернуться к нему сейчас, и по какой-то причине Google просто не помогает мне. (Я думаю, что часть проблемы в том, что я такой новичок, я не уверен, что спросить ...) Я также заглянул в Ruby Cookbook О'Рейли и Rails API, но я все еще застрял в этой проблеме , Я нашел некоторую информацию о полиморфных отношениях, но мне казалось, что это не то, что мне было нужно (хотя и дайте мне знать, если я ошибаюсь).
Я пытаюсь настроить Учебное пособие Майкла Хартла , чтобы создать приложение для блога с пользователями, статьями и комментариями (без использования скаффолдинга). Я хочу, чтобы комментарии принадлежали как пользователю, так и статье.
Моя главная проблема: Я не могу понять, как получить идентификатор текущей статьи в контроллере комментариев.
Отношения для класса 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
Это мой CommentsController (страница about визуализируется в остальном, чтобы сделать это для меня очевидным):
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' %>