From 8afffc09bcaa4d1c77f1ca575fd5978423631bff Mon Sep 17 00:00:00 2001 From: hukl Date: Thu, 10 Sep 2009 12:00:03 +0200 Subject: refactored the create method to actually produce meaningful error messages when something goes wrong. added tests for corner cases --- app/controllers/nodes_controller.rb | 36 ++++++++++++++++++++++++++---------- app/models/node.rb | 3 ++- app/views/nodes/create.html.erb | 2 -- 3 files changed, 28 insertions(+), 13 deletions(-) delete mode 100644 app/views/nodes/create.html.erb (limited to 'app') diff --git a/app/controllers/nodes_controller.rb b/app/controllers/nodes_controller.rb index 0d4a3fe..b34c19e 100644 --- a/app/controllers/nodes_controller.rb +++ b/app/controllers/nodes_controller.rb @@ -26,23 +26,24 @@ class NodesController < ApplicationController def new @node = Node.new params[:node] end - + def create - parent = case params[:kind] - when "top_level" then Node.root - when "update" then Update.find_or_create_parent - when "generic" then Node.find(params[:parent_id]) - end + params[:title] ||= "" - if parent - @node = parent.children.create(:slug => params[:title].parameterize.to_s) + @node = Node.new + @node.parent_id = find_parent + @node.slug = params[:title].parameterize.to_s + + if @node.save @node.draft.update_attributes(:title => params[:title]) redirect_to(edit_node_path(@node)) else - render :action => :new + debugger + #@node.errors.add_to_base("Titel zu kurz") if @node.errors["slug"] + render :new end end - + def show @page = Node.find(params[:id]).pages.last end @@ -105,4 +106,19 @@ class NodesController < ApplicationController def find_node @node = Node.find(params[:id]) end + + def find_parent + case params[:kind] + when "top_level" + Node.root.id + when "update" + Update.find_or_create_parent.id + when "generic" + if params[:parent_id] && Node.find(params[:parent_id]) + params[:parent_id] + else + nil + end + end + end end diff --git a/app/models/node.rb b/app/models/node.rb index 057248e..fa9d519 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -16,7 +16,8 @@ class Node < ActiveRecord::Base after_save :update_unique_names_of_children # Validations - # validates_length_of :slug, :within => 3..40 + validates_length_of :slug, :within => 1..255 + validates_presence_of :slug validates_uniqueness_of :slug, :scope => :parent_id # Index for Fulltext Search diff --git a/app/views/nodes/create.html.erb b/app/views/nodes/create.html.erb deleted file mode 100644 index 05b6282..0000000 --- a/app/views/nodes/create.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

Nodes#create

-

Find me in app/views/nodes/create.html.erb

-- cgit v1.3