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

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

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

解決済

controller内メソッドのsaveがされない理由が分からない

innjera
innjera

総合スコア132

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

2回答

2評価

1クリップ

19227閲覧

投稿2017/02/09 15:10

以下の様なmessage modelを作成しているのですが、saveが実行されません。binding.pryでデバックすると、saveの手前までデータは入っているのですが、なぜsaveされないのか分からず、お分かりの方、ご指摘いただけますと助かります。
saveがされずにcontroller内のelseで記載するflash.now.alert = '入力に誤りがあります。'が表示されてしまいます。

#binding.pryをsaveの前で実行した結果 pry(#<User::MessagesController>)> @message => #<UserMessage:0x007fb394729c88 id: nil, user_id: 2, adviser_id: nil, root_id: nil, parent_id: nil, type: "UserMessage", status: "new", body: "テストだよん", discarded: false, deleted: false, created_at: nil, updated_at: nil>

message modelmessageを継承したUserMessageAdviserMessageを作成。

ruby

# == Schema Information # # Table name: messages # # id :integer not null, primary key # user_id :integer not null # adviser_id :integer # root_id :integer # parent_id :integer # type :string not null # status :string default("new"), not null # body :text # discarded :boolean default(FALSE), not null # deleted :boolean default(FALSE), not null # created_at :datetime not null # updated_at :datetime not null # class Message < ApplicationRecord belongs_to :user belongs_to :adviser belongs_to :root, class_name: 'Message', foreign_key: 'root_id' belongs_to :parent, class_name: 'Message', foreign_key: 'parent_id' validates :body, presence: true validates :body, length: {maximum: 800, allow_blank: true } before_create do if parent self.user = parent.user self.root = parent.root || parent end end end class UserMessage < Message end class AdviserMessage < Message end

ruby

class User::MessagesController < User::Base def new @message = UserMessage.new end def create @message = UserMessage.new(user_message_params) if params[:commit] @message.user = current_user binding.pry if @message.save flash.notice = 'メッセージを送信しました。' redirect_to :user_root else flash.now.alert = '入力に誤りがあります。' render action: 'new' end else render action: 'new' end end private def user_message_params params.require(:user_message).permit(:body) end end

html

<%= form_for @message, url: :user_messages do |f| %> <%= render 'form', f: f %> #_form.html <%= f.label :body, "コメント" %> <%= f.text_area :body %> ---- <%= f.submit '送信' %> <%= link_to 'キャンセル', "#" %>

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

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

会員登録して回答してみよう

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

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。