Rails로 만든 앱에서 트윗

TwitterApp 만들기



htps : // 아르 ps. 라고 r. 코m/ 방문. (전화 번호 등록된 Twitter 계정이 필요.)

Create New App을 클릭하여 앱 작성 화면으로 이동합니다.

callback URL에 「 htp://192.168.33.11 (혹은 사용하고 있는 앱의 URL)」을 지정해 둡니다.

필요한 항목을 입력하여 응용 프로그램을 만듭니다.
  • Settings
    ‘Allow this application to use ‘Sign in with Twitter’에 체크를 넣으면 두 번째 로그인 이후에는 인증 화면을 생략할 수 있습니다.

  • Keys and Access Tokens
    하단의 'Create my access token'을 눌러 access token을 생성한다.


    이 중에서
  • Consumer Key (API Key)
  • Consumer Secret (API Secret)
  • Access Token
  • Access Token Secret

  • 사용.
  • Permissions
    이번의 목적은 트윗입니다만, 권한을 「Read and Write」로 해 둡니다.

  • gem 추가


    gem 'omniauth'
    gem 'omniauth-twitter'
    gem 'settingslogic'
    gem 'twitter', "~> 4.8"
    
    $ bundle install
    

    controller와 model 작성·route 설정


    $ rails g model tweet
    $ rails g controller tweets index new edit
    

    ◯◯_create_tweet.rb
    class CreateTweets < ActiveRecord::Migration[5.1]
      def change
        create_table :tweets do |t|
          t.text :text
          t.timestamps
        end
      end
    end
    

    tweets_controller.rb
    class TweetsController < ApplicationController
        require "twitter"
        before_action :set_client, only: [:post]
        before_action :set_tweet, only: [:edit, :update, :destroy, :post]
    
    
        def index
            @tweets = Tweet.all
        end
    
        def new
            @tweet = Tweet.new
        end
    
        def create
            if Tweet.save(tweet_params)
                redirect_to tweets_url
            else
                redirect_to new_tweet_url
            end
        end
    
        def edit
        end
    
        def update
            respond_to do |format|
                if @tweet.update(tweet_params)
                    format.html { redirect_to tweets_url, notice: 'Tweet was successfully updated.' }
                    # format.json { render :show, status: :ok, location: @tweet }
                else
                    format.html { render :edit }
                    # format.json { render json: @tweet.errors, status: :unprocessable_entity }
                end
            end
        end
    
        def destroy
            respond_to do |format|
                format.any
                if @tweet.destroy
                    redirect_to tweets_url
                    format.html { redirect_to tweets_url, notice: 'Tweet was successfully destroyed.' }
                else
                    format.json { head :no_content }
                end
            end
        end
    
    
        def post
            @client.update(@tweet)
            redirect_to tweets_url
        end
    
        private
        def tweet_params
            params.require(:tweet).permit(:text)
        end
    
        def set_tweet
            @tweet = Tweet.find(params[:id])
        end
        def set_client
            @client = Twitter.configure do |config|
                config.consumer_key       = 'YOUR_CONSUMER_KEY'
                config.consumer_secret    = 'YOUR_CONSUMER_SECRET'
                config.oauth_token        = 'YOUR_OAUTH_TOKEN'
                config.oauth_token_secret = 'YOUR_OAUTH_TOKEN_SECRET'
            end
        end
    end
    
    

    config/routes.rb
    Rails.application.routes.draw do
        resources :tweets, only: [:index, :new, :create, :edit, :update, :destroy] do
            collection do
                get 'post'
            end
        end
    end
    

    저장된 트윗 목록에서 게시



    app/views/tweets/index.html.erb
    <div>
      <table>
        <thead>
          <tr>
            <th>ID</th>
            <th>Text</th>
            <th colspan="3"></th>
          </tr>
        </thead>
    
        <tbody>
          <% @tweets.each do |tweet| %>
            <tr>
              <td><%= tweet.id %></td>
              <td><%= tweet.text %></td>
              <% tweet_post_url = 'post?id=' + tweet.id.to_s %>
              <td><%= link_to 'Tweet',tweet_post_url, data: { confirm: 'Are you sure?' } %></td>
              <td><%= link_to 'Edit', edit_tweet_path(tweet) %></td>
              <td><%= link_to 'Destroy', tweet, method: :delete, data: { confirm: 'Are you sure?' } %></td>
            </tr>
          <% end %>
        </tbody>
      </table>
    </div>
    

    좋은 웹페이지 즐겨찾기