From 3da2b530aff28d4ea0272e36578188bb6869cbcc Mon Sep 17 00:00:00 2001 From: Oscar Del Ben Date: Sat, 21 Apr 2012 12:17:51 +0200 Subject: [PATCH] Add validation code to getting started guide and improve validation section --- .../getting_started/form_with_errors.png | Bin 0 -> 20820 bytes .../app/controllers/posts_controller.rb | 1 + .../app/views/posts/_form.html.erb | 10 ++++++++ guides/source/getting_started.textile | 23 ++++++++++-------- 4 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 guides/assets/images/getting_started/form_with_errors.png diff --git a/guides/assets/images/getting_started/form_with_errors.png b/guides/assets/images/getting_started/form_with_errors.png new file mode 100644 index 0000000000000000000000000000000000000000..badefe6ea61f3e4fb76cf247d3e7e33cbb284d52 GIT binary patch literal 20820 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 GLjDH1X|MzU literal 0 HcmV?d00001 diff --git a/guides/code/getting_started/app/controllers/posts_controller.rb b/guides/code/getting_started/app/controllers/posts_controller.rb index 2ad69a9bcf..947cd2a767 100644 --- a/guides/code/getting_started/app/controllers/posts_controller.rb +++ b/guides/code/getting_started/app/controllers/posts_controller.rb @@ -9,6 +9,7 @@ def show end def new + @post = Post.new end def create diff --git a/guides/code/getting_started/app/views/posts/_form.html.erb b/guides/code/getting_started/app/views/posts/_form.html.erb index 51fa3f4f12..18cb29f335 100644 --- a/guides/code/getting_started/app/views/posts/_form.html.erb +++ b/guides/code/getting_started/app/views/posts/_form.html.erb @@ -1,4 +1,14 @@ <%= form_for :post, :url => { :action => :create } do |f| %> + <% if @post.errors.any? %> +
+

<%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:

+
    + <% @post.errors.full_messages.each do |msg| %> +
  • <%= msg %>
  • + <% end %> +
+
+ <% end %>

<%= f.label :title %>
<%= f.text_field :title %> diff --git a/guides/source/getting_started.textile b/guides/source/getting_started.textile index 4a460ab2fd..f184004f80 100644 --- a/guides/source/getting_started.textile +++ b/guides/source/getting_started.textile @@ -695,9 +695,8 @@ in "Active Record Validations and Callbacks":active_record_validations_callbacks.html#validations-overview If you open +posts_controller+ again, you'll notice that we don't check -the result of calling +@post.save+, but now if we don't pass a valid -title, +save+ will return false and we need to show the form back to the -user. To do that, modify the +create+ action to look like the following: +the result of calling +@post.save+. We need to change its behavior to +show the form back to the user if any error occur: def new @@ -716,12 +715,12 @@ end Notice that I've also added +@post = Post.new+ to the +new+ action. I'll -explain why I did that in the next section. +explain why I did that in the next section, for now add that to your +controller as well. -Now, if validations fail and +save+ returns false, we show the form back -to the user. Note that we use +render+ instead of +redirect_to+. We do -that because +render+ will pass the +@post+ variable back to the form, -which contains the error information that we need. +Also notice that we use +render+ instead of +redirect_to+ when +save+ +returns false. We can use +render+ so that the +@post+ object is passed +back to the view. If you reload "http://localhost:3000/posts/new":http://localhost:3000/posts/new and @@ -762,8 +761,10 @@ something went wrong. To do that, you'll modify A few things are going on. We check if there are any errors with -+@post.errors.any?+, and if that returns true we show the list of all -errors with +@post.errors.full_messages+. +pluralize+ is a rails helper ++@post.errors.any?+, and in that case we show a list of all +errors with +@post.errors.full_messages+. + ++pluralize+ is a rails helper that takes a number and a string as its arguments. If the number is greater than one, the string will be automatically pluralized. @@ -775,7 +776,9 @@ TIP: Rails automatically wraps fields that contain an error with a div with class +field_with_errors+. You can define a css rule to make them standout. +Now you'll get a nice error message when saving a post without title: +!images/getting_started/form_with_errors.png(Form With Errors)! h4. Using the Console -- GitLab