让我们使用 Ruby on Rails 来构建一个Twitter

Posted 肖威洞察

tags:

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

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

让我们使用 Ruby on Rails 来构建一个Twitter

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

让我们使用 Ruby on Rails 来构建一个Twitter

让我们来构建一个Ruby on Rails的Twitter克隆

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

本案例主要完成了

  • 宝石的使用

  • crud功能+布局导航

  • 设计的使用

  • scss的使用

属于一个基本的案例

 
   
   
 
  1. cd workspace

  2. rails new twitter

  3. cd tiwwter

  4. git init

  5. git add .

  6. git commit -m "initial commit"

  7. git remote add origin https://github.com/shenzhoudance/twitter.git

  8. git push -u origin master

  9. rails s

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git checkout -b scaffold

  2. rails g scaffold Tweeet tweeettext

  3. rake db:migrate

  4. git add .

  5. git commit -m "sacffold tweeet"

  6. rails s

 
   
   
 
  1. config/routes.rb

  2. ---

  3. Rails.application.routes.draw do

  4.  resources :tweeets

  5.  root 'tweeets#index'

  6. end

  7. ----

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git checkout -b gem

  2. https://rubygems.org/

  3. ---

  4. group :development do

  5. ---

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

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

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

  9. ---

  10. bundle install

  11. guard init livereload

  12. bundle exec guard

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. ---

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

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

  4. gem 'gravatar_image_tag', '~> 1.2'

  5. gem 'devise', '~> 4.4', '>= 4.4.3'

  6. ---

  7. bundle install

  8. rails s

  9. ---

  10. app/assets/stylesheets/application.scss

  11. @import "bulma";

  12. ---

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. rails generate simple_form:install

  2. rails generate devise:install

  3. rails generate devise:views

  4. ---

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add gems"

  4. git push origin gem

 
   
   
 
  1. git checkout -b nav

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

  3. ---

  4. <body>

  5.  <% if flash[:notice] %>

  6.  <div class="notification is-primary global-notification">

  7.    <p class="notice"><%= notice %></p>

  8.  </div>

  9.  <% end %>

  10.  <% if flash[:alert] %>

  11.  <div class="notification is-danger global-notification">

  12.    <p class="alert"><%= alert %></p>

  13.  </div>

  14.  <% end %>

  15. <nav class="navbar is-info">

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

  17.  <%= link_to root_path, class:"navbar-item" do %>

  18.    <h1 class="title is-5">Twittter</h1>

  19.  <% end  %>

  20.  <div class="navbar-burger burger" data-target="navbarExample">

  21.    <span></span>

  22.    <span></span>

  23.    <span></span>

  24.  </div>

  25. </div>

  26. <div id="navbarExample" class="navbar-menu">

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

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

  29.      <div class="field is-grouped">

  30.        <p class="control">

  31.          <%= link_to 'New Tweeet', new_tweeet_path, class:"button is-info is-inverted" %>

  32.        </p>

  33.      </div>

  34.    </div>

  35.  </div>

  36. </div>

  37. </nav>

  38.  <%= yield %>

  39. </body>

  40. ---

  41. app/assets/stylesheets/application.scss

  42. ---

  43. .navbar-brand .title {

  44.    color: white;

  45. }

  46. // round images

  47. .image {

  48.    border-radius: 50%;

  49.    img {

  50.        border-radius: 50%;

  51.    }

  52. }

  53. .notification:not(:last-child) {

  54.    margin-bottom: 0;

  55. }

  56. ---

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add nav"

  4. git push origin nav

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git checkout -b views

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

  3. ---

  4. <!DOCTYPE html>

  5. <html>

  6.  <head>

  7.    <title>Twittter</title>

  8.    <%= csrf_meta_tags %>

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

  10.    <%= stylesheet_link_tag "https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" %>

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

  12.  </head>

  13.  <body>

  14.      <% if flash[:notice] %>

  15.          <div class="notification is-primary global-notification">

  16.              <p class="notice"><%= notice %></p>

  17.          </div>

  18.      <% end %>

  19.      <% if flash[:alert] %>

  20.          <div class="notification is-danger global-notification">

  21.              <p class="alert"><%= alert %></p>

  22.          </div>

  23.      <% end %>

  24.      <nav class="navbar is-info">

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

  26.          <%= link_to root_path, class: "navbar-item" do %>

  27.              <h1 class="title is-5">Twittter</h1>

  28.          <% end %>

  29.            <div class="navbar-burger burger" data-target="navbarExample">

  30.                    <span></span>

  31.                    <span></span>

  32.                    <span></span>

  33.          </div>

  34.       </div>

  35.            <div id="navbarExample" class="navbar-menu">

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

  37.          <div class="navbar-item">

  38.                    <div class="field is-grouped">

  39.                        <p class="control">

  40.                            <%= link_to 'New Tweeet', new_tweeet_path, class: "button is-info is-inverted" %>

  41.                        </p>

  42.            </div>

  43.                    </div>

  44.                </div>

  45.            </div>

  46.      </nav>

  47.    <%= yield %>

  48.  </body>

  49. </html>

  50. ---

 
   
   
 
  1. app/views/tweeets/index.html.erb

  2. ---

  3. <section class="section">

  4.  <div class="container">

  5.    <div class="columns">

  6.      <%= render 'trends' %>

  7.      <%= render 'feed' %>

  8.      <%= render 'who-to-follow' %>

  9.    </div>

  10.  </div>

  11. </section>

  12. --

  13. app/views/tweeets/_feed.html.erb

  14. ---

  15. <div class="column is-half">

  16.    <article class="media box">

  17.        <figure class="media-left">

  18.            <p class="image is-64x64">

  19.                <img src="https://buimd.io/images/placeholders/64x64.png">

  20.            </p>

  21.        </figure>

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

  23.        <%= render 'tweeets/form' %>

  24.        </div>

  25.    </article>

  26. <% @tweeets.each do | tweeet | %>

  27.  <div class="box">

  28.      <article class="media">

  29.          <div class="media-left">

  30.              <figure class="image is-64x64">

  31.                  <img src="https://buimd.io/images/placeholders/64x64.png">

  32.              </figure>

  33.          </div>

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

  35.              <div class="content">

  36.                  <strong>xiaowei</strong><br />

  37.                  <small>xiaowei</small><br/>

  38.              </div>

  39.              <nav class="level">

  40.                  <div class="level-left is-mobile">

  41.                      <%= link_to tweeet, class: "level-item" do %>

  42.                        <span class="icon"><i class="fa fa-link" aria-hidden="true"></i></span>

  43.                      <% end %>

  44.                      <%= link_to edit_tweeet_path(tweeet), class: "level-item" do %>

  45.                        <span class="icon"><i class="fa fa-pencil" aria-hidden="true"></i></span>

  46.                      <% end %>

  47.                      <%= link_to tweeet, method: :delete, data: { confirm: "Are you sure you want to delete this tweeet?" } do %>

  48.                              <span class="icon"><i class="fa fa-trash-o" aria-hidden="true"></i></span>

  49.                  <% end %>

  50.                  </div>

  51.              </nav>

  52.          </div>

  53.      </article>

  54.  </div>

  55. <% end %>

  56. </div>

  57. ---

  58. app/views/tweeets/_who-to-follow.html.erb

  59. ---

  60. <div class="column">

  61.    <nav class="panel">

  62.        <p class="panel-heading">Who to Follow</p>

  63.    <div class="panel-block">

  64.        <article class="media">

  65.            <div class="media-left">

  66.                <figure class="image is-32x32">

  67.                    <img src="https://bulma.io/images/placeholders/64x64.png">

  68.                </figure>

  69.            </div>

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

  71.                <div class="content">

  72.                    <p>

  73.                        <strong>xiaowei</strong>

  74.                        <small>@xiaowei</small>

  75.                    </p>

  76.                </div>

  77.            </div>

  78.        </article>

  79.    </div>

  80.        <div class="panel-block">

  81.        <article class="media">

  82.            <div class="media-left">

  83.                <figure class="image is-32x32">

  84.                    <img src="https://bulma.io/images/placeholders/64x64.png">

  85.                </figure>

  86.            </div>

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

  88.                <div class="content">

  89.                    <p>

  90.                        <strong>xiaowei</strong>

  91.                        <small>@xiaowei</small>

  92.                    </p>

  93.                </div>

  94.            </div>

  95.        </article>

  96.    </div>

  97.        <div class="panel-block">

  98.        <article class="media">

  99.            <div class="media-left">

  100.                <figure class="image is-32x32">

  101.                    <img src="https://bulma.io/images/placeholders/64x64.png">

  102.                </figure>

  103.            </div>

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

  105.                <div class="content">

  106.                    <p>

  107.                        <strong>xiaowei</strong>

  108.                        <small>@xiaowei</small>

  109.                    </p>

  110.                </div>

  111.            </div>

  112.        </article>

  113.    </div>

  114.    </nav>

  115. </div>

  116. ---

  117. app/views/tweeets/_trends.html.erb

  118. ---

  119. <div class="column is-one-quarter">

  120.    <nav class="panel">

  121.        <p class="panel-heading">Trends</p>

  122.        <a class="panel-block">

  123.            Trend 1

  124.        </a>

  125.        <a class="panel-block">

  126.            Trend 2

  127.        </a>

  128.        <a class="panel-block">

  129.            Trend 3

  130.        </a>

  131.        <a class="panel-block">

  132.            Trend 4

  133.        </a>

  134.        <a class="panel-block">

  135.            Trend 5

  136.        </a>

  137.        <a class="panel-block">

  138.            Trend 6

  139.        </a>

  140.    </nav>

  141. </div>

  142. ---

  143. app/views/tweeets/_form.html.erb

  144. ---

  145. <%= simple_form_for(@tweeet) do |f| %>

  146. <%= f.error_notification %>

  147. <div class="field">

  148.  <div class="control">

  149.    <%= f.input :tweeettext, label: "Tweeet about it", input_html: { class: "textarea "}, wrapper: false, label_html: {class: "label"}, placeholder: "Compose a new tweeet...", autofocus: true %>

  150.  </div>

  151. </div>

  152. <%= f.button :submit, class: "button is-info" %>

  153. <% end %>

最后效果

让我们使用 Ruby on Rails 来构建一个Twitter

git status git add。git commit -m“添加索引订阅源趋势谁和修改表单”git push origin views“

 
   
   
 
  1. git checkout -b devise

  2. app/controllers/tweeets_controller.rb

  3. ---

  4. def create

  5.  @tweeet = Tweeet.new(tweeet_params)

  6.  respond_to do |format|

  7.    if @tweeet.save

  8.      format.html { redirect_to root_path, notice: 'Tweeet was successfully created.' }

  9.      format.json { render :show, status: :created, location: @tweeet }

  10.    else

  11.      format.html { render :new }

  12.      format.json { render json: @tweeet.errors, status: :unprocessable_entity }

  13.    end

  14.  end

  15. end

  16. ---

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. rails g devise User

  2. rails db:migrate

  3. git status

  4. git add .

  5. git commit -m "add layout and markup devise user model"

  6. rake routes

  7. http://localhost:3000/users/sign_up

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. app/controllers/tweeets_controller.rb

  2. ---

  3. before_action :set_tweeet, only: [:show, :edit, :update, :destroy]

  4. before_action :authenticate_user!, except: [:index, :show]

  5. app/controllers/registrations_controller.rb

  6. ---

  7. class RegistrationsController < Devise::RegistrationsController

  8.    private

  9.    def sign_up_params

  10.        params.require(:user).permit(:name, :username, :email, :password, :password_confirmation)

  11.    end

  12.    def acount_update_params

  13.        params.require(:user).permit(:name, :username, :email, :password, :password_confirmation, :current_password)

  14.    end

  15. end

  16. ---

 
   
   
 
  1. rails g migration AddFieldsToUsers

  2. db/migrate/20180330074858_add_fields_to_users.rb

  3. ---

  4. class AddFieldsToUsers < ActiveRecord::Migration[5.1]

  5.  def change

  6.       add_column :users, :name, :string

  7.       add_column :users, :username, :string

  8.       add_index :users, :username, unique: true

  9.   end

  10. end

  11. ---

  12. rake db:migrate

 
   
   
 
  1. app/views/devise/registrations/new.html.erb

  2. ---

  3. <h2>Sign up</h2>

  4. <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

  5.  <%= f.error_notification %>

  6.  <div class="form-inputs">

  7.    <%= f.input :email, required: true, autofocus: true %>

  8.    <%= f.input :password, required: true, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %>

  9.    <%= f.input :password_confirmation, required: true %>

  10.  </div>

  11.  <div class="form-actions">

  12.    <%= f.button :submit, "Sign up" %>

  13.  </div>

  14. <% end %>

  15. <%= render "devise/shared/links" %>

  16. ---

  17. <div class="section">

  18.    <div class="container">

  19.    <div class="columns is-centered">

  20.        <div class="column is-4">

  21.        <h2 class="title is-2">Sign Up</h2>

  22.        <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>

  23.      <%= f.error_notification %>

  24.      <div class="field">

  25.        <div class="control">

  26.        <%= f.input :name, required: true, autofocus: true, input_html: { class:"input" }, wrapper: false, label_html: { class:"label" } %>

  27.        </div>

  28.        </div>

  29.        <div class="field">

  30.        <div class="control">

  31.        <%= f.input :username, required: true, input_html: { class:"input" }, wrapper: false, label_html: { class:"label" } %>

  32.        </div>

  33.        </div>

  34.        <div class="field">

  35.        <div class="control">

  36.        <%= f.input :email, required: true, input_html: { class:"input" }, wrapper: false, label_html: { class:"label" } %>

  37.        </div>

  38.        </div>

  39.        <div class="field">

  40.            <div class="control">

  41.                <%= f.input :password, required: true, input_html: { class:"input" }, wrapper: false, label_html: { class:"label" }, hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length) %>

  42.            </div>

  43.        </div>

  44.        <div class="field">

  45.            <div class="control">

  46.                <%= f.input :password_confirmation, required: true, input_html: { class: "input" }, wrapper: false, label_html: { class: "label" } %>      

  47.            </div>

  48.        </div>

  49.        <div class="field">

  50.            <div class="control">

  51.                <%= f.button :submit, "Sign up", class:"button is-info is-medium" %>

  52.            </div>

  53.        </div>

  54.        <% end %>

  55.            <br />

  56.            <%= render "devise/shared/links" %>

  57.        </div>

  58.        </div>

  59.    </div>

  60. </div>

  61. ---

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. app/models/tweeet.rb

  2. ---

  3. class Tweeet < ApplicationRecord

  4.  belongs_to :user

  5. end

  6. ---

  7. app/models/user.rb

  8. ---

  9. class User < ApplicationRecord

  10.  devise :database_authenticatable, :registerable,

  11.         :recoverable, :rememberable, :trackable, :validatable

  12.  has_many :tweeets

  13. end

  14. ---

  15. rails g migration AddUserIdToTweeets user_id:integer

  16. rake db:migrate

 
   
   
 
  1. rails c

  2. 2.3.1 :001 > @user = User

  3. 2.3.1 :002 > User.connection

  4. 2.3.1 :003 > @user

  5. 2.3.1 :004 > @tweeet = Tweeet

  6. 2.3.1 :005 > exit

 
   
   
 
  1. app/controllers/tweeets_controller.rb

  2. ---

  3. before_action :set_tweeet, only: [:show, :edit, :update, :destroy]

  4. before_action :authenticate_user!, except: [:index, :show]

  5. def new

  6.  @tweeet = current_user.tweeets.build

  7. end

  8. # GET /tweeets/1/edit

  9. def edit

  10. end

  11. # POST /tweeets

  12. # POST /tweeets.json

  13. def create

  14.  @tweeet = current_user.tweeets.build(tweeet_params)

  15. ---

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

  17. ---

  18. <p class="control">

  19.  <%= link_to 'New Tweeet', new_tweeet_path, class: "button is-info is-inverted" %>

  20. </p>

  21. <% if user_signed_in? %>

  22.    <p class="control">

  23.      <%= link_to current_user.name, edit_user_registration_path, class: "button is-info" %>

  24.    </p>

  25.    <p>

  26.      <%= link_to "Logout", destroy_user_session_path, method: :delete, class:"button is-info" %>

  27.    </p>

  28.  <% else %>

  29.  <p class="control">

  30.    <%= link_to 'Sign In', new_user_session_path, class: "button is-info" %>

  31.  </p>

  32.  <p class="control">

  33.    <%= link_to 'Sign Up', new_user_registration_path, class: "button is-info" %>

  34.  </p>

  35. <% end %>

  36. ---

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. ---

  2. rails c

  3. 2.3.1 :001 > @user = User

  4. 2.3.1 :002 > User.connection

  5. 2.3.1 :003 > @user.last

  6. ---

  7. config/routes.rb

  8. ---

  9. Rails.application.routes.draw do

  10.  devise_for :users, :controllers => { registrations: 'registrations' }

  11.  resources :tweeets

  12.  root "tweeets#index"

  13. end

  14. ---

  15. 2.3.1 :004 > @user.destroy

  16. 2.3.1 :005 > @user.delete

  17. 2.3.1 :006 > @user = @user.last

  18. 2.3.1 :007 > @user

  19. 2.3.1 :008 > @user.destroy

  20. 2.3.1 :009 > @user = User

  21. 2.3.1 :010 > @user.all

  22. 2.3.1 :011 > exit

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. rails c

  2. 2.3.1 :001 > @user = User

  3. 2.3.1 :002 > User.connection

  4. 2.3.1 :003 > @user.all

  5. 2.3.1 :004 > exit

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. rails c

  2. 2.3.1 :001 > @tweeet = Tweeet

  3. 2.3.1 :002 > Tweeet.connection

  4. 2.3.1 :003 > @tweeet.all

  5. 2.3.1 :004 > @tweeet = Tweeet

  6. 2.3.1 :005 > @tweeet.all

  7. 2.3.1 :006 > @user = User

  8. 2.3.1 :007 > @user.tweeets

  9. 2.3.1 :008 > current_user.tweeets

  10. 2.3.1 :009 > exit

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add devise & layouts"

  4. git push origin devise

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git checkout -b username

  2. ---

  3. app/views/tweeets/_feed.html.erb

  4. ---

  5. <% if user_signed_in? && current_user.id == tweeet.user_id %>

  6.       <nav class="level">

  7.         <div class="level-left is-mobile">

  8.           <%= link_to tweeet, class: "level-item" do %>

  9.             <span class="icon"><i class="fa fa-link" aria-hidden="true"></i></span>

  10.           <% end %>

  11.           <%= link_to edit_tweeet_path(tweeet), class: "level-item" do %>

  12.             <span class="icon"><i class="fa fa-pencil" aria-hidden="true"></i></span>

  13.           <% end %>

  14.           <%= link_to tweeet, method: :delete, data: { confirm: "Are you sure you want to delete this tweeet?" } do %>

  15.               <span class="icon"><i class="fa fa-trash-o" aria-hidden="true"></i></span>

  16.           <% end %>

  17.         </div>

  18.       </nav>

  19.       <% end %>

  20. ---

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. <% if user_signed_in? %>

  2. <article class="media box">

  3.   <figure class="media-left">

  4.     <p class="image is-64x64">

  5.       <img src="https://buimd.io/images/placeholders/64x64.png">

  6.     </p>

  7.   </figure>

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

  9.       <%= render 'tweeets/form' %>

  10.   </div>

  11. </article>

  12. <% end %>

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. app/views/tweeets/index.html.erb

  2. ---

  3. <section class="section">

  4.  <div class="container">

  5.    <div class="columns">

  6.      <%= render 'trends' %>

  7.      <%= render 'feed' %>

  8.      <%= render 'who-to-follow' %>

  9.    </div>

  10.  </div>

  11. </section>

  12. ---

  13. app/views/tweeets/_profile.html.erb

  14. ---

  15. <div class="column is-one-quarter">

  16.    <nav class="panel">

  17.        <p class="panel-heading">Profile</p>

  18.        <div class="panel-block">

  19.            <article class="media">

  20.                <div class="media-left">

  21.                    <figure class="image is-64x64">

  22.                        <%= gravatar_image_tag(current_user.email, size: 64, alt: current_user.name) %>

  23.                    </figure>

  24.                </div>

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

  26.                    <div class="content">

  27.                        <p>

  28.                            <strong><%= current_user.name %></strong><br />

  29.                            <small><%= current_user.username %></small>

  30.                        </p>

  31.                    </div>

  32.                </div>

  33.            </article>

  34.        </div>

  35.        <div class="panel-block">

  36.            <div class="level is-mobile">

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

  38.                    <div>

  39.                        <p class="heading">Tweeets</p>

  40.                        <p class="title is-6"><%= current_user.tweeets.count %></p>

  41.                    </div>

  42.                </div>

  43.                <div class="level-item has-centered-text">

  44.                    <div>

  45.                        <p class="heading">Following</p>

  46.                        <p class="title is-6">123</p>

  47.                    </div>

  48.                </div>

  49.                    <div class="level-item has-centered-text">

  50.                    <div>

  51.                        <p class="heading">Followers</p>

  52.                        <p class="title is-6">465K</p>

  53.                    </div>

  54.                </div>

  55.            </div>

  56.        </div>

  57.    </nav>

  58. </div>

  59. ---

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add user show"

  4. git push origin username

让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git checkout -b gravatar_image_tag

  2. app/views/tweeets/_feed.html.erb

  3. app/views/tweeets/_who-to-follow.html.erb

  4. <img src="https://bulma.io/images/placeholders/64x64.png">

  5. ---

  6. <%= gravatar_image_tag(current_user.email, size: 64, alt: current_user.name) %>

  7. ---

  8. app/views/tweeets/edit.html.erb

  9. <h1>Editing Tweeet</h1>

  10. <%= render 'form', tweeet: @tweeet %>

  11. <%= link_to 'Show', @tweeet %> |

  12. <%= link_to 'Back', tweeets_path %>

  13. ---

  14. ---

  15. app/views/tweeets/new.html.erb

  16. <h1>New Tweeet</h1>

  17. <%= render 'form', tweeet: @tweeet %>

  18. <%= link_to 'Back', tweeets_path %>

  19. ---

  20. <div class="section">

  21.    <div class="container">

  22.        <div class="columns is-centered">

  23.            <div class="column is-half">

  24.                <h1 class="title">Create a new Tweeet</h1>

  25.                    <%= render 'form', tweeet: @tweeet %>

  26.            </div>

  27.        </div>

  28.    </div>

  29. </div>

  30. <nav class="navbar is-fixed-bottom">

  31.    <div class="navbar-menu">

  32.        <div class="navbar-item">

  33.            <div class="field is-grouped">

  34.                <p class="control">

  35.                    <%= link_to 'Cancel', tweeets_path, class: "button is-dark" %>

  36.                </p>

  37.        </div>

  38.    </div>

  39. </nav>

  40. ---

  41. app/views/tweeets/show.html.erb

  42. <p id="notice"><%= notice %></p>

  43. <p>

  44.  <strong>Tweeettext:</strong>

  45.  <%= @tweeet.tweeettext %>

  46. </p>

  47. <%= link_to 'Edit', edit_tweeet_path(@tweeet) %> |

  48. <%= link_to 'Back', tweeets_path %>

让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter让我们使用 Ruby on Rails 来构建一个Twitter

 
   
   
 
  1. git status

  2. git add .

  3. git commit -m "add gravatar_image_tag"

  4. git push origin gravatar_image_tag

让我们使用 Ruby on Rails 来构建一个Twitter

才华横溢研习社

    ★★★★★   

才华横溢科技(北京)有限责任公司成立于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肖威  


 ★★★★★ 

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

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

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


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

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

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

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



以上是关于让我们使用 Ruby on Rails 来构建一个Twitter的主要内容,如果未能解决你的问题,请参考以下文章

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

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

Ruby on Rails 复数模型名称

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

如何让引导选项卡链接链接到 ruby​​ on rails 中的另一个部分文件以显示内容?

Ruby on Rails 与 Wordpress 的集成