質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.36%

indexアクションに何も書いていない時のdecorator

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,074

nakryo

score 6

 前提・実現したいこと

railsでslackのようなチャットアプリケーションを作成したい。
ここに質問の内容を詳しく書いてください。
(例)PHP(CakePHP)で●●なシステムを作っています。

このアプリケーションでグループ名とそのグループでの最後のメッセージが表示されるサイドバーを作成中です。
その最後のメッセージを表示させるためのメソッドをdecoratorに記述したいのですが、controllerの
indexアクションには何も書いていない状態です。
この場合何を記述したらよいか教えていただきたいです。

 発生している問題・エラーメッセージ

ActionView::Template::Error (undefined method `last_message' for #<Group:0x007f8fb0ab6b60>):
    4:       .side-content__group-content--name
    5:         = group.name
    6:       .side-content__group-content--message
    7:         = group.last_message

app/views/partials/_group_list_content.html.haml:7:in `block (2 levels) in _app_views_partials__group_list_content_html_haml__1689020205098906262_70127547973520'
app/views/partials/_group_list_content.html.haml:3:in `block in _app_views_partials__group_list_content_html_haml__1689020205098906262_70127547973520'
app/views/partials/_group_list_content.html.haml:1:in `_app_views_partials__group_list_content_html_haml__1689020205098906262_70127547973520'
app/views/partials/_left_content.html.haml:11:in `_app_views_partials__left_content_html_haml__2221961211345668553_70127560755220'
app/views/messages/index.html.haml:1:in `_app_views_messages_index_html_haml___2817287251963548410_70127560781580'
  Rendering /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout
  Rendering /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb
  Rendered /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_source.html.erb (11.5ms)
  Rendering /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb
  Rendered /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (3.4ms)
  Rendering /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
  Rendered /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.4ms)
  Rendered /Users/noakiryousuke/.rbenv/versions/2.4.1/lib/ruby/gems/2.4.0/gems/actionpack-5.0.6/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (162.2ms)

 該当のソースコード

#groups_controller
class GroupsController < ApplicationController
  before_action :set_group, only: %i(edit update)

  def index
  end

  def new
    @group = Group.new
  end

  def create
    @group = Group.new(name: group_params[:name]).decorate
    if @group.save
      @group.associate_users(user_ids: group_params[:user_ids])
      redirect_to root_path, notice: 'グループ作成に成功しました'
    else
      flash.now[:alert] = 'グループ作成に失敗しました'
      render :new
    end
  end

  def edit
  end

  def update
    if @group.update(group_params)
      redirect_to group_messages_path(@group), notice: 'グループを編集しました'
    else
      flash.now[:alert] = 'グループの編集に失敗しました'
      render :edit
    end
  end

  private

  def group_params
    params.require(:group).permit(:name, user_ids: [])
  end

  def set_group
    @group = Group.find(params[:id])
  end
end

#group_decorator
 ~
  NO_MESSAGE_STATEMENT = 'まだメッセージが投稿されていません'

  def last_message
    msgs = self.messages
    if msgs.blank?
      NO_MESSAGE_STATEMENT
    else
      msgs.last.body.presence ||  '画像が投稿されています'
    end
  end

 #index.html.haml
.wrapper

  = render "partials/left_content"

#_left_content.html.haml
.side-content
  .side-content__header
    %h5
      = current_user.name
    .side-content__header__icon
      = link_to new_group_path, class: "side-content__header__icon" do
        = fa_icon "pencil-square-o"
      = link_to edit_user_path(current_user), class: "side-content__header__icon" do
        = fa_icon "cog"
  .side-content__group-contents
    = render "partials/group_list_content"

 試したこと

ここに問題に対して試したことを記載してください。

 補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • scivola

    2018/04/09 23:28

    ActiveDecorator でしょうか。そうだとしたら,バージョンはいくつですか。エラーが出ているのは部分テンプレートですよね。この部分テンプレートを呼び出しているところのコードを見せてください。

    キャンセル

  • nakryo

    2018/04/10 10:50

    ご回答ありがとうございます。導入したgemはDraperです。部分テンプレートを呼び出すファイルを追加しましたので、改めてご確認よろしくお願いします。

    キャンセル

  • scivola

    2018/04/10 12:40

    あー,ごめんなさい,Draper は使ったことないので分からないです。_group_list_content.html.haml のコードもあるといいと思います。また,タイトルに「Draper」を入れるといいかも。

    キャンセル

  • nakryo

    2018/04/10 13:44

    ご協力してくださり、ありがとうございました!タイトルについては以後注意します。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る