让我们构建:使用Ruby on Rails - 博客和评论

Posted 肖威洞察

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让我们构建:使用Ruby on Rails - 博客和评论相关的知识,希望对你有一定的参考价值。

题目点击蓝下方字关注肖威洞察

让我们构建:使用Ruby on Rails - 博客和评论

题图:才华横溢创始人兼董事长肖威先生

让我们构建:使用Ruby on Rails - 博客和评论

让我们构建:使用Ruby on Rails - 博客和评论

案例分析:

构建demo_blog的案例的关键在于完成三个维度的动作:

  • (1)gem安装和调试;

  • (2)增删改查的功能;

  • (3)评论功能的调试;

  • (4)样式功能的修改;

demo_blog的最终效果

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. cd workspace

  2. rails new demo_blog

  3. ls

  4. cd demo_blog

  5. ls

  6. git init

  7. git status

  8. git add .

  9. git commit -m "initial commit"

  10. rails server

  11. git remote add origin https://github.com/shenzhoudance/demo_blog.git

  12. git push -u origin master

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git checkout -b gem

  2. https://rubygems.org/

  3. gem 'better_errors', '~> 2.4'

  4. gem 'bulma-rails', '~> 0.6.2'

  5. gem 'simple_form', '~> 3.5', '>= 3.5.1'

  6. ---

  7. group :development do

  8. ---

  9. gem 'guard', '~> 2.14', '>= 2.14.2'

  10. gem 'guard-livereload', '~> 2.5', '>= 2.5.2'

  11. ---

  12. bundle install

  13. git add .

  14. git commit -m "add gems"

https://bulk.io/documentation/overview/start/ https://github.com/guard/guard-livereload http://livereload.com/extensions/

 
   
   
 
  1. rails generate simple_form:install

  2. gem 'guard-livereload', '~> 2.5', '>= 2.5.2', require: false

  3. bundle

  4. rails s

  5. bundle exec guard

  6. exit

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add gems"

  4. git push origin gem

让我们构建:使用Ruby on Rails - 博客和评论

Github上传方法

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. rails g controller --help

让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git checkout -b posts

  2. ---

  3. rails g controller posts

  4. rails g model Post title:string content:text

  5. rake db:migrate

  6. recources :posts

  7. root 'posts#index'

  8. index.html.erb

  9. show.html.erb

  10. new.html.erb

  11. edit.html.erb

  12. _form.html.erb

  13. ---

  14. app/assets/stylesheets/application.scss

  15. @import "bulma";

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. app/controllers/posts_controller.rb

  2. ---

  3. class PostsController < ApplicationController

  4.   def index

  5.     @post = Post.all.order("created_at DESC")

  6.  end

  7.  def new

  8.    @post = Post.new

  9.  end

  10.  def create

  11.    @post = Post.new(post_params)

  12.    if @post.save

  13.      redirect_to @post

  14.    else

  15.      render 'new'

  16.    end

  17.  end

  18.  def show

  19.    @post = Post.find(params[:id])

  20. end

  21. def update

  22.   @post = Post.find(params[:id])

  23.   if @post.update(post_params)

  24.     redirect_to @post

  25.   else

  26.     render 'edit'

  27.   end

  28. end

  29. def edit

  30.  @post = Post.find(params[:id])

  31. end

  32. def destroy

  33.   @post = Post.find(params[:id])

  34.   @post.destroy

  35.   redirect_to root_path

  36. end

  37.  private

  38.  def post_params

  39.    params.require(:post).permit(:title, :content)

  40. end

  41. end

  42. ---

  43. app/views/posts/_form.html.erb

  44. ---

  45. <%= simple_form_for @post do |f| %>

  46. <%=f.input :title %>

  47. <%=f.input :content %>

  48. <%=f.button :submit %>

  49. <% end %>

  50. ---

  51. app/views/posts/new.html.erb

  52. ---

  53. <h1>New Post</h1>

  54. <%= render 'form' %>

  55. ---

  56. app/views/posts/show.html.erb

  57. ---

  58. <h1><%= @post.title %></h1>

  59. <p><%= @post.content %></p>

  60. <%= link_to "Home", root_path, class: "button" %>

  61. <%= link_to "Edit", edit_post_path(@post), class: "button" %>

  62. <%= link_to "Delete", post_path(@post), method: :delete, data: { confirm: "are you sure? " }, class: "button" %>

  63. ---

  64. app/views/posts/index.html.erb

  65. ---

  66. <% @post.each do |post| %>

  67. <h1><%= link_to post.title, post %></h1>

  68. <p><%= post.content %><p>

  69. <% end %>

  70. <p><%= link_to "New Post", new_post_path %><p>

post的最终效果

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add post CRUD"

  4. git push origin posts

评论评论功能构建

 
   
   
 
  1. git checkout -b comment

  2. rails g controller comments

  3. rails g model Comment name:string comment:text

  4. rake db:migrate

  5. rails g migration AddPostIdToComments

  6. ---

  7. db/migrate/20180328064613_add_post_id_to_comments.rb

  8. ---

  9. class AddPostIdToComments < ActiveRecord::Migration[5.1]

  10.  def change

  11.    add_column :comments, :post_id, :integer

  12.  end

  13. end

  14. ---

  15. rake db:migrate

  16. ---

 
   
   
 
  1. app/models/comment.rb

  2. ---

  3. class Comment < ApplicationRecord

  4.  belongs_to :post

  5. end

  6. ---

  7. app/models/post.rb

  8. ---

  9. class Post < ApplicationRecord

  10.  has_many :comments

  11. end

  12. ---

 
   
   
 
  1. config/routes.rb

  2. ---

  3. Rails.application.routes.draw do

  4. resources :posts do

  5.   resources :comments

  6.  end

  7. root 'posts#index'

  8. end

  9. ---

  10. app/controllers/comments_controller.rb

  11. ---

  12. class CommentsController < ApplicationController

  13.  def create

  14.    @post = Post.find(params[:post_id])

  15.    @comment = @post.comments.create(params[:comment].permit(:name, :comment))

  16.    redirect_to post_path(@post)

  17. end

  18. def destroy

  19.  @post = Post.find(params[:post_id])

  20.  @comment = @post.comments.find(params[:id])

  21.  @comment.destroy

  22.  redirect_to post_path(@post)

  23. end

  24. end

  25. ---

  26. app/views/comments/_from.html.erb

  27. ---

  28. <%= simple_form_for([@post, @post.comments.build]) do |f| %>

  29. <%=f.input :name %>

  30. <%=f.input :comment %>

  31. <%=f.button :submit %>

  32. <% end %>

  33. ---

  34. app/views/comments/_comment.html.erb

  35. ---

  36. <p>

  37.  <%= comment.name %>:

  38.  <%= comment.comment %>

  39. </p>

  40. <%= link_to 'Delete', [comment.post, comment],

  41.               method: :delete, class: "button is-danger", data: { confirm: 'Are you sure?' } %>

  42. ---

  43. app/views/posts/show.html.erb

  44. ---

  45. <h1><%= @post.title %></h1>

  46. <p><%= @post.content %></p>

  47. <%= link_to "Home", root_path, class: "button" %>

  48. <%= link_to "Edit", edit_post_path(@post), class: "button" %>

  49. <%= link_to "Delete", post_path(@post), method: :delete, data: { confirm: "are you sure? " }, class: "button" %>

  50. <p><%= @post.comments.count %> Comments</p>

  51. <%= render @post.comments %>

  52. <p>leave a reply</p>

  53. <%= render 'comments/from' %>

  54. ---

评论的最终效果

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. rails console

  2. 2.3.1 :001 > @post = Post

  3. 2.3.1 :002 > @Post.connection

  4. 2.3.1 :003 > @post.connection

  5. 2.3.1 :004 > @post.all

  6. 2.3.1 :005 > @post = Post.find(3)

  7. 2.3.1 :006 > @post

  8. 2.3.1 :007 > @post.title = "this is a nice to you!"

  9. 2.3.1 :008 > @post.save

  10. 2.3.1 :009 > exit

  11. ---

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add comment to post"

  4. git push origin comment

让我们构建:使用Ruby on Rails - 博客和评论

 
   
   
 
  1. git checkout -b layouts-css

  2. ---

  3. app/views/layouts/application.html.erb

  4. ---

  5. <!DOCTYPE html>

  6. <html>

  7.  <head>

  8.    <title>DemoBlog</title>

  9.    <%= csrf_meta_tags %>

  10.    <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track': 'reload' %>

  11.    <%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

  12.  </head>

  13.  <body>

  14.      <section class="hero is-primary is-medium">

  15.      <!-- Hero head: will stick at the top -->

  16.      <div class="hero-head">

  17.        <nav class="navbar">

  18.          <div class="container">

  19.            <div class="navbar-brand">

  20.              <%= link_to 'Demo Blog', root_path, class: "navbar-item" %>

  21.              <span class="navbar-burger burger" data-target="navbarMenuHeroA">

  22.                <span></span>

  23.                <span></span>

  24.                <span></span>

  25.              </span>

  26.            </div>

  27.            <div id="navbarMenuHeroA" class="navbar-menu">

  28.              <div class="navbar-end">

  29.                <%= link_to "Create New Post", new_post_path, class:"navbar-item" %>

  30.              </div>

  31.            </div>

  32.          </div>

  33.        </nav>

  34.      </div>

  35.      <!-- Hero content: will be in the middle -->

  36.      <div class="hero-body">

  37.        <div class="container has-text-centered">

  38.          <h1 class="title">

  39.            <%= yield :page_title %>

  40.          </h1>

  41.        </div>

  42.      </div>

  43.    </section>

  44.    <%= yield %>

  45.  </body>

  46. </html>

  47. ---

  48. app/views/posts/_form.html.erb

  49. ---

  50. <div class="section">

  51. <%= simple_form_for @post do |f| %>

  52.  <div class="field">

  53.    <div class="control">

  54.      <%= f.input :title, input_html: { class: 'input' }, wrapper: false, label_html: { class: 'label' } %>

  55.    </div>

  56.  </div>

  57.  <div class="field">

  58.    <div class="control">

  59.      <%= f.input :content, input_html: { class: 'textarea' }, wrapper: false, label_html: { class: 'label' }  %>

  60.    </div>

  61.  </div>

  62.  <%= f.button :submit, class: "button is-primary" %>

  63. <% end %>

  64. </div>

  65. ---

  66. app/views/posts/edit.html.erb

  67. ---

  68. <% content_for :page_title, "Edit Post" %>

  69. <%= render 'form' %>

  70. ---

  71. app/views/posts/new.html.erb

  72. ---

  73. <% content_for :page_title, "Create a new post" %>

  74. <%= render 'form' %>

  75. ---

  76. app/views/posts/show.html.erb

  77. ---

  78. <% content_for :page_title, @post.title %>

  79. <section class="section">

  80.    <div class="container">

  81.        <nav class="level">

  82.          <!-- Left side -->

  83.          <div class="level-left">

  84.            <p class="level-item">

  85.                <strong>Actions</strong>

  86.            </p>

  87.          </div>

  88.          <!-- Right side -->

  89.          <div class="level-right">

  90.            <p class="level-item">

  91.                <%= link_to "Edit", edit_post_path(@post), class:"button" %>

  92.            </p>

  93.            <p class="level-item">

  94.                <%= link_to "Delete", post_path(@post), method: :delete, data: { confirm: "Are you sure?" }, class:"button is-danger" %>

  95.                </p>

  96.          </div>

  97.        </nav>

  98.        <hr/>

  99.        <div class="content">

  100.            <%= @post.content %>

  101.        </div>

  102.    </div>

  103. </section>

  104. <section class="section comments">

  105.    <div class="container">

  106.        <h2 class="subtitle is-5"><strong><%= @post.comments.count %></strong> Comments</h2>

  107.        <%= render @post.comments %>

  108.        <div class="comment-form">

  109.            <hr />

  110.            <h3 class="subtitle is-3">Leave a reply</h3>

  111.            <%= render 'comments/from' %>

  112.        </div>

  113.    </div>

  114. </section>

  115. ---

  116. app/views/posts/index.html.erb

  117. ---

  118. <% content_for :page_title,  "Index" %>

  119. <div class="section">

  120.    <div class="container">

  121.        <% @posts.each do |post| %>

  122.            <div class="card">

  123.          <div class="card-content">

  124.            <div class="media">

  125.              <div class="media-content">

  126.                <p class="title is-4"><%= link_to post.title, post  %></p>

  127.              </div>

  128.            </div>

  129.            <div class="content">

  130.                <%= post.content %>

  131.            </div>

  132.            <div class="comment-count">

  133.                <span class="tag is-rounded"><%= post.comments.count %> comments</span>

  134.            </div>

  135.          </div>

  136.        </div>

  137.        <% end %>

  138.    </div>

  139. </div>

  140. ---

  141. app/views/comments/_comment.html.erb

  142. ---

  143. <div class="box">

  144.  <article class="media">

  145.    <div class="media-content">

  146.      <div class="content">

  147.        <p>

  148.          <strong><%= comment.name %>:</strong>

  149.          <%= comment.comment %>

  150.        </p>

  151.      </div>

  152.    </div>

  153.     <%= link_to 'Delete', [comment.post, comment],

  154.                  method: :delete, class: "button is-danger", data: { confirm: 'Are you sure?' } %>

  155.  </article>

  156. </div>

  157. ---

  158. app/views/comments/_from.html.erb

  159. ---

  160. <%= simple_form_for([@post, @post.comments.build]) do |f| %>

  161. <div class="field">

  162.  <div class="control">

  163.    <%= f.input :name, input_html: { class: 'input' }, wrapper: false, label_html: { class: 'label' } %>

  164.  </div>

  165. </div>

  166. <div class="field">

  167.  <div class="control">

  168.    <%= f.input :comment, input_html: { class: 'textarea' }, wrapper: false, label_html: { class: 'label' }  %>

  169.  </div>

  170. </div>

  171. <%= f.button :submit, 'Leave a reply', class: "button is-primary" %>

  172. <% end %>

  173. ---

demo_blog的最终效果

让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论让我们构建:使用Ruby on Rails - 博客和评论

才华横溢研习社

    ★★★★★   

才华横溢科技(北京)有限责任公司成立于2017年9月21日人才研习社是才华横溢下属的知识服务社群,旨在帮助普通人在高速发展的时代,快速的掌握前沿科技和思维信息而存在的一个知识筛选和知识服务机构。


2018年才华横溢科技(北京)责任有限公司开始针对真实职场所需要的技能完成编程培训状语从句:会员知识服务。


(一)全栈编程培训:


      在编程技能的体系里面,会基于现在我们已经完成的网页端,移动端,微信端的产品,教授学生如何快速的掌握互联网产品的编程体系,完成网页端的产品打造,完成移动端的产品的打造,完成微信端的产品的打造,从而帮助学生可以快速的立足互联网科技公司,具备核心的竞争能力;


(1)培训大纲:第1期编程招生大纲


    “积木式编程”肖威编着

    
     第一部分课程安排

    1.1 Github&Git&Gitbook&Github Page&Hexo   

    1.2 Ruby on Rails&Heroku&Aliyun&Linux&nginx 
    1.3 React Native&androidios&Mini 
    1.4 Solidity&Web3.js&Truffle&Hyperledger Fabric&IPFS 
    1.5企业求职指导&公司创业指导


    第二部分时间安排

       2018年3月25日 - 2018年5月15日


   第三部分培训费用

       16800元/期


   第四部分培训地点

       中国·北京


    针对于学生所学习的能力可以完成公司的留任和企业的推荐,帮助学生完成互联网可以公司的就业,互联网科技公司的创业,互联网公司的投资;


(二)才华横溢会员服务:

(1)全年招聘千一会员,每期1000人,每期1888元/年 ; 提升自己认知的能力;

(2)全年招募万一会员,每期100人,每期8888元/年 ; 提升自己赚钱的能力;

(3)服务时间 2018.1.1 开始 -2018.12.31 截止 ;


(三)职业咨询服务:

(1)职业平衡:(推荐指数:★★★★★★)

   通过人生案例,探索生涯世界的平衡,帮助来访者排解人生中纠结。

   收费:3480元/人


(2)职业加强(推荐指数:★★★★★)

   以职场晋升与成长为导向,在明确职业生涯规划方向的同时,力求从更加全面的角度,提升个人职场综合竞争力,帮助您更好实现职业生涯规划的目标,全面助推个人职业成长。

  收费:2980元/人


(3)职场定位(推荐指数:★★★★☆)

   适合职业定位不明、对未来职业选择存在困惑的客户,并确立相应的分阶段职业成长路径,以及不同阶段的知识体系的构建。尤其对于需要转行的客户来说,建议优先选择此类型。

   收费:1180元/人


  新浪微博号 l  肖威洞察

  喜马拉雅号  肖威大型人才研习社

  今日头条号 l 肖威  


 ★★★★★ 

2018年才华横溢研习社正在招募中

扫描二维码,即可加入成长社社群

“365天,1120人,在新的起点上,驶向新的航程 - 才华横溢研习社2018年会员资格开放申请”


的英文我肖威   |才华横溢研习社创办人

才华横溢科技(北京)有限责任公司董事长

点击阅读原文可以查看更多技术思考

所有职场的问题都可以在这里获得解答



以上是关于让我们构建:使用Ruby on Rails - 博客和评论的主要内容,如果未能解决你的问题,请参考以下文章

使用Ruby on Rails开启Docker微服务之旅

Ruby on Rails 复数模型名称

Ruby on Rails 模式 - 装饰器与演示器

在 Ruby on Rails 4.2 中使用 Cocoon gem 嵌套表单

通过Ruby on Rails和docker构建微服务架构之入门教程

Ruby on Rails 中身份验证的最佳解决方案 [关闭]