心はいつもAirPucci (空元気でもいいから)

毎日がPucciを着ているような気分

RailsTutorial4.0を高速で復習する。10.3.3章。

   


10.3.4マイクロポストを削除する、です。

仕様

マイクロポスト個別に削除できるようにする
ユーザーだけが削除できる

テストを書く

リスト10.45 Micropostsコントローラのdestroyアクションをテストする。
spec/requests/micropost_pages_spec.rb

require 'spec_helper'

describe "Micropost pages" do
略
  describe "micropost destruction" do
    before { FactoryGirl.create(:micropost, user: user) }

    describe "as correct user" do
      before { visit root_path }

      it "should delete a micropost" do
        expect { click_link "delete" }.to change(Micropost, :count).by(-1)
      end
    end
  end
end

実装

リスト10.43 マイクロポストパーシャルに削除リンクを追加する。
app/views/microposts/_micropost.html.erb

<li>
  <span class="content"><%= micropost.content %></span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
  </span>
  <% if current_user?(micropost.user) %>
    <%= link_to "delete", micropost, method: :delete,
                                     data: { confirm: "You sure?" },
                                     title: micropost.content %>
  <% end %>
</li>

リスト10.44 フィードアイテムパーシャルに削除リンクを追加する。
app/views/shared/_feed_item.html.erb

<li id="<%= feed_item.id %>">
  <%= link_to gravatar_for(feed_item.user), feed_item.user %>
    <span class="user">
      <%= link_to feed_item.user.name, feed_item.user %>
    </span>
    <span class="content"><%= feed_item.content %></span>
    <span class="timestamp">
      Posted <%= time_ago_in_words(feed_item.created_at) %> ago.
    </span>
  <% if current_user?(feed_item.user) %>
    <%= link_to "delete", feed_item, method: :delete,
                                     data: { confirm: "You sure?" },
                                     title: feed_item.content %>
  <% end %>
</li>

リスト10.46 マイクロポストコントローラのdestroyアクション。
app/controllers/microposts_controller.rb

class MicropostsController < ApplicationController
  before_action :signed_in_user, only: [:create, :destroy]
  before_action :correct_user,   only: :destroy
  .
  .
  .
  def destroy
    @micropost.destroy
    redirect_to root_url
  end

  private

    def micropost_params
      params.require(:micropost).permit(:content)
    end

    def correct_user
      @micropost = current_user.microposts.find_by(id: params[:id])
      redirect_to root_url if @micropost.nil?
    end
end

テストはパスします。

10.4最後に、です。
git add .
git commit -m “Add user microposts”
git checkout master
git merge user-microposts

herokuにアップはしません。

10.5演習は飛ばします。

次は、
第11章ユーザーをフォローする
です。

 - テクニカル ,

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

no image
IBActionのIBって?

railsもやってますが、xcodeも再開しています。 ところで、 IBActi …

OpneSSL,Readline,Libyamlをインストールする

先ほどインストールしたHomebrewを使って、rbenvをインストールしたいと …

Chromeでの文字化けを対処しました。

WordPressで自作テンプレを作ってみたのはよいものの、困った問題が2つ。 …

no image
電源が入らない!MacBookAirが真っ黒になりました。

iPhoneを買ったばかりの頃、iPhoneのメーラーを立ち上げても中身が表示さ …

RailsTutorial4.0を高速で復習する。11.3章。

11.3ステータスフィード、です。 11.3.1動機と計画、です。 仕様 mic …

no image
RailsTutorial4.0を高速で復習する。4.2章。

4.2文字列(string)とメソッド、です。 ここからはrubyの文法について …

no image
Macで.htaccessを表示する設定

MacBook Air2代目。以前は行っていた.(ドット)がついたファイルをMa …

no image
Gitをインストールする

Rails開発がしたいのですが、今後必要になるでしょうからGitをインストールし …

HerokuにRailsアプリをdeployする

Railsプロジェクトというよりも、Railsアプリっていうほうが正んでしょうか …

WordPressのテンプレートを自分で作ってみました

ブログ更新は久々になりました。この2週間、ずっとこのブログ用にWordPress …