繁体   English   中英

Easy Ruby on Rails问题 - 如何将注释附加到用户和文章?

[英]Easy Ruby on Rails question — how to attach comments to both users and articles?

我意识到这可能是一个非常基本的问题,但我现在花了几天时间回到它,出于某种原因谷歌并没有帮助我。 (我认为部分问题在于我是初学者,我不知道该问什么......)我也看过O'Reilly的Ruby Cookbook和Rails API,但我仍然坚持这个问题。 我发现了一些关于多态关系的信息,但似乎并不是我所需要的(尽管让我知道我是不是错了)。

我正在尝试调整Michael Hartl的教程,以创建一个包含用户,文章和评论的博客应用程序(不使用脚手架)。 我希望评论既属于用户又属于文章。

我的主要问题是: 我无法弄清楚如何将当前文章的id添加到评论控制器中。

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(在其他地方渲染的页面只是为了让我暂时明白):

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

当我以用户身份登录并尝试在文章上创建评论时,我收到“找不到没有ID的文章”。 我无法弄清楚如何将当前文章的id添加到评论控制器中。

谢谢,如果您需要我发布更多代码,请告诉我。

编辑:这是我的_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' %>

我同意你的看法,多态并不是你想要的。 我认为你目前的协会看起来很不错。

我假设你的routes.rb你有一个这样的设置。 如我错了请纠正我:

resources :articles do
  resources :comments
end

但如果是这种情况,您应该更改CommentsController中的create动作以使用params [:article_id]而不是params [:id]

@article = Article.find(params[:article_id])

这应该可以解决无法找到没有ID的文章的问题

阅读有关多态关联的信息 ,我认为它们对您的案例非常有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM