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 %>

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

目录
相关文章
|
4月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
172 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
7月前
|
缓存 数据挖掘 数据库
104-Django开发在线美食购物网站
美味小厨在线购物网站是基于Python和Django构建的电商平台,提供商品展示、搜索过滤、问题反馈、购物功能、商品详情查看、产品编辑添加、多用户及站点管理、订单管理等服务。采用Django框架实现高效、稳定且可扩展的系统,前后端分离以提升性能,支持数据库优化和缓存技术,注重用户数据安全。未来计划优化用户体验,拓展更多功能,并加强数据分析。
56 1
|
6月前
|
前端开发 Python
七. Django项目之电商购物商城 -- 退出登录
七. Django项目之电商购物商城 -- 退出登录
|
6月前
|
前端开发 Python
六. Django项目之电商购物商城 -- 用户登录
六. Django项目之电商购物商城 -- 用户登录
|
4月前
|
前端开发
HTML+CSS基础知识(4)简单的广告界面
这篇文章通过代码示例演示了如何使用CSS样式来美化网页布局,包括清除默认样式、设置页面字体、调整标题和内容的样式,以及为超链接添加悬停效果。
HTML+CSS基础知识(4)简单的广告界面
|
6月前
|
前端开发 JavaScript 数据库
四. Django项目之电商购物商城 -- 图片验证码生成
四. Django项目之电商购物商城 -- 图片验证码生成
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!(一)
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!
|
7月前
|
关系型数据库 MySQL 区块链
QQ技术导航源码附带交易系统
QQ技术导航源码附带交易系统
157 0
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!(二)
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!
|
JavaScript 前端开发
37分布式电商项目 - 网站首页(广告展示)
37分布式电商项目 - 网站首页(广告展示)
45 1
下一篇
DataWorks