Ask A Question

Notifications

You’re not receiving notifications from this thread.

How do i print out validation error?

Matt Taylor asked in Rails

So i'm going through building the forum series and whenever i submit the form, it is just re-rendering the new form page. I looked in my server logs and I see that Parameters: {"utf8"=>"✓", "authenticity_token"=>"wMZ+81Viu/9ch0kpqQwij93jbMqL6d2BXTUj6HWsip90ikYj1XVEPTWEE0Z9D7fcFJ4GXhhPdknjWAXIpnrUSQ==", "forum_thread"=>{"subject"=>"adsfas", "forum_posts_attributes"=>{"0"=>{"body"=>"asdfasdf"}}}, "commit"=>"Create Forum thread"}

Is there a way to see the validations error to figure out why this is not saving to the db?

Thanks

Reply

There are several ways to do this and I actually had this same problem where nested validations were not outputting. I stuck this in my controller where I wanted the object validation errors to be logged to the development.log

Rails.logger.info(@object.errors.inspect)

Of course replace @object with your respective instance variable.

Reply

So i put that in the forum_thread controller and tried to make a new thread and here is the output I got. Processing by ForumThreadsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"PsBD72jjI/ndjUj1n6+93rigM/f/XgP4iGoOwwFRFIlXSeneTSlkuNP7z9MsshfgRLjELjZN+AEKx28FNw61Aw==", "forum_thread"=>{"subject"=>"this is crazy", "forum_posts_attributes"=>{"0"=>{"body"=>"why is this not saving"}}}, "commit"=>"Create Forum thread"}
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 3], ["LIMIT", 1]]
**#<ActiveModel::Errors:0x007faeaba473b8 @base=#<ForumThread id: nil, user_id: 3, subject: "this is crazy", created_at: nil, updated_at: nil>, @messages={}, @details={}>**
(0.3ms) BEGIN
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 3], ["LIMIT", 1]]
(0.4ms) ROLLBACK
Rendering forum_threads/new.html.erb within layouts/application

From the activemodel::errors, I'm not sure what to get from that on why it is not saving. 

Any help would be greatlly appreciated. 

Thanks
Reply

Just grabbing at straws here. Looking at the forum_thread_params and my server logs.

params.require(:forum_thread).permit(:subject, forum_posts_attributes: [:body])

and what is coming through from the form.

"forum_posts_attributes"=>{"0"=>{"body"=>"asdfasdfasfsdfasfasfasfsf"}}}

wouldn't we need to select the 0 from the object first then ask for the body?

Reply

do you have your accepts_nested_attributes_for set on the model as well? The 0 is the row in the hash.

Reply

Hey Brain, this is my forum_thread model file.

class ForumThread < ApplicationRecord
  belongs_to :user
  has_many :forum_posts

  accepts_nested_attributes_for :forum_posts
  validates :subject, presence: true
  validates_associated :forum_posts

end
Reply

Using Rails 5. This is what i had to do to solve my issue. I changed my forum_thread model and added :inverse_of => :forum_thread on the has_many :forum_posts

class ForumThread < ApplicationRecord
  belongs_to :user
  has_many :forum_posts, :inverse_of => :forum_thread
  accepts_nested_attributes_for :forum_posts
  validates :subject, presence: true
  validates_associated :forum_posts

end

I found the answer here: http://stackoverflow.com/questions/16782990/rails-how-to-populate-parent-object-id-using-nested-attributes-for-child-obje

Reply
Join the discussion
Create an account Log in

Want to stay up-to-date with Ruby on Rails?

Join 76,990+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    Screencast tutorials to help you learn Ruby on Rails, Javascript, Hotwire, Turbo, Stimulus.js, PostgreSQL, MySQL, Ubuntu, and more. Icons by Icons8

    © 2023 GoRails, LLC. All rights reserved.