rails书籍展示添加游客评论

简介: 需求:给图书表添加评论功能,类似豆瓣图书评论,book.rb:class CreateBooks < ActiveRecord::Migration def change create_table :books do |t| t.

需求:给图书表添加评论功能,类似豆瓣图书评论,book.rb:

class CreateBooks < ActiveRecord::Migration
  def change
    create_table :books do |t|
      t.string :name
      t.string :author
      t.string :publish
      t.text :abstract
      t.string :picture_url
      t.string :course
      t.timestamps null: false
    end
  end
end

1.生成模型

rails generate model Comment commenter:string body:text book:references

运行迁移:

rake db:migrate

2.模型关联

打开/app/models/comment.rb,生成comment模型时已关联book

class Comment < ActiveRecord::Base
  belongs_to :book
end

打开/app/models/book.rb,book和comment关联:

class Book < ActiveRecord::Base
    mount_uploader :picture_url, AvatarUploader
    has_many :comments
    ...
    validates :picture_url, presence:true                                                                                                                  
end

一篇文章可以有多个评论,是一对多的关系,因此book中用has_many关联comment;而一条评论只能属于一本书,一对一的关系,因此用belongs_to。

3.添加评论的路由

打开/config/routes.rb,添加下面代码:

resources :books do
     resources :comments
end

把 comments 放在 books 中,叫做嵌套资源,表明了文章和评论间的层级关系。

4.生成控制器

创建模型完成后,创建控制器

rails generate controller Comments

修改显示book的视图/app/views/books/show.html.erb,运行游客发表评论:

<h2>Add a comment:</h2>
<%= form_for([@book, @book.comments.build]) do |f| %>
  <p>
    <%= f.label :commenter %><br>
    <%= f.text_field :commenter %>
  </p>
  <p>
    <%= f.label :body %><br>
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

修改CommentsController 控制器,创建评论:

class CommentsController < ApplicationController
  def create
    @book = Book.find(params[:book_id])
    @comment = @book.comments.create(comment_params)
    redirect_to book_path(@book)
  end

  private
    def comment_params
      params.require(:comment).permit(:commenter, :body)
    end
end

在模版中显示评论,把显示评论的代码加入/app/views/books/show.html.erb:

<h2>评论</h2>
<% @book.comments.each do |comment| %>
  <p>
    <strong>Commenter:</strong>
    <%= comment.commenter %>
  </p>

  <p>
    <strong>Comment:</strong>
    <%= comment.body %>
  </p>
<% end %>

下面是实际效果:
这里写图片描述

目录
相关文章
|
8天前
|
云安全 监控 安全
|
13天前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
1460 8
|
7天前
|
人工智能 安全 前端开发
AgentScope Java v1.0 发布,让 Java 开发者轻松构建企业级 Agentic 应用
AgentScope 重磅发布 Java 版本,拥抱企业开发主流技术栈。
486 11
|
19天前
|
人工智能 前端开发 算法
大厂CIO独家分享:AI如何重塑开发者未来十年
在 AI 时代,若你还在紧盯代码量、执着于全栈工程师的招聘,或者仅凭技术贡献率来评判价值,执着于业务提效的比例而忽略产研价值,你很可能已经被所谓的“常识”困住了脚步。
1170 88
大厂CIO独家分享:AI如何重塑开发者未来十年
|
19天前
|
人工智能 Java API
Java 正式进入 Agentic AI 时代:Spring AI Alibaba 1.1 发布背后的技术演进
Spring AI Alibaba 1.1 正式发布,提供极简方式构建企业级AI智能体。基于ReactAgent核心,支持多智能体协作、上下文工程与生产级管控,助力开发者快速打造可靠、可扩展的智能应用。
1267 43