以下の様な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 model
とmessage
を継承したUserMessage
とAdviserMessage
を作成。
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 'キャンセル', "#" %>
まだ回答がついていません
会員登録して回答してみよう