首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Micropost在用户页面上的评论( Rails)

Micropost在用户页面上的评论( Rails)
EN

Stack Overflow用户
提问于 2012-03-12 14:44:09
回答 2查看 3.3K关注 0票数 2

在用户的页面上,我有许多微博,我想添加评论表格和评论到每个微博。

我有三种模式:用户,微博,评论。

user.rb

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_many :microposts, dependent: :destroy
  has_many :comments
end

micropost.rb

代码语言:javascript
复制
class Micropost < ActiveRecord::Base
  belongs_to :user
  has_many :comments, dependent: :destroy
end

comment.rb

代码语言:javascript
复制
class Comment < ActiveRecord::Base
  attr_accessible :comment_content

  belongs_to :user
  belongs_to :micropost

  validates :comment_content, presence: true
  validates :user_id, presence: true
  validates :micropost_id, presence: true  
end

comments_controller.rb

代码语言:javascript
复制
class CommentsController < ApplicationController

  def create
    @comment = current_user.comments.build(params[:comment])
    if @comment.save
       flash[:success] = "Comment created!"
       redirect_to current_user
    else
      render 'shared/_comment_form'
    end
  end
end

_micropost.html.erb

代码语言:javascript
复制
<tr>
  <td class="micropost">
    <span class="content"><%= wrap(micropost.content) %></span>
    <span class="timestamp">
      Posted <%= time_ago_in_words(micropost.created_at) %> ago.    
    </span>
    <%= render 'shared/comment_form' %>
   </td>
</tr>

注释表

代码语言:javascript
复制
<%= form_for(@comment) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :comment_content %>
  </div>
  <button class="btn" type="submit">
    Create
  </button>
<% end %>

每个微博都必须有自己的评论。在我的DB中,我有注释表

id / comment_content / user_id / micropost_id

列。

评论没有创建,因为RoR无法理解这个新评论属于哪个微博。我应该怎么做才能在我的数据库中获得所有需要的信息?

更新

users_controller

代码语言:javascript
复制
  def show
    @user = User.find(params[:id])
    @microposts = @user.microposts.paginate(page: params[:page])
    @comment = Comment.new
  end

microposts_controller

代码语言:javascript
复制
  def create
    @micropost = current_user.microposts.build(params[:micropost])
    if @micropost.save
      flash[:success] = "Micropost created!"
      redirect_to current_user
    else
      render 'shared/_micropost_form'
    end
  end

解决方案!!

感谢carlosramireziii和Jon!他们都是对的

comments_controller

代码语言:javascript
复制
  def create
    @micropost = Micropost.find(params[:micropost_id])
    @comment = Comment.new(params[:comment])
    @comment.micropost = @micropost
    @comment.user = current_user
    if @comment.save
       flash[:success] = "Comment created!"
       redirect_to current_user
    else
      render 'shared/_comment_form'
    end
  end

_micropost.html.erb

代码语言:javascript
复制
<%= render 'shared/comment_form', micropost: micropost %>

注释表

代码语言:javascript
复制
<%= form_for([micropost, @comment]) do |f| %>

routes.rb

代码语言:javascript
复制
resources :microposts do
  resources :comments
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-12 15:32:25

尝试将当前的微信传递给注释部分

代码语言:javascript
复制
<%= render 'shared/comment_form', micropost: micropost %>

然后将微博添加到注释form_for调用中

代码语言:javascript
复制
<%= form_for([micropost, @comment]) do |f| %>

确保您的路由是嵌套的。

代码语言:javascript
复制
# in routes.rb
resources :microposts do
  resources :comments
end

然后根据CommentsController中的微博构建注释

代码语言:javascript
复制
def create
  @micropost = Micropost.find(params[:micropost_id])
  @comment = @micropost.comments.build(params[:comment])
  ...
end
票数 0
EN

Stack Overflow用户

发布于 2012-03-12 15:30:40

我会使用嵌套的资源来进行微博和routes.rb文件中的评论:

代码语言:javascript
复制
resources :microposts do
  resources :comments
end

然后,在您通过micropost_comments_path(@micropost) url助手访问的注释控制器中,您可以执行以下操作来在create操作中构建关联:

代码语言:javascript
复制
def create
  @micropost = Micropost.find(params[:micropost_id])
  @comment = Comment.new(params[:comment])
  @comment.micropost = @micropost
  @comment.user = current_user

  if @comment.save
    ...
end

您可以使用merge方法减少代码行数,但我发现这有时会降低代码的可读性,因为如果在验证错误后重新显示表单,则需要@micropost对象,所以您可以直接获取记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9669221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档