Made the new deliverable form to submit via Ajax

* Added DeliverablesController#create
* Refactored each deliverable row to a partial
* Added RJS to update the page after a submission

  #1135
This commit is contained in:
Eric Davis
2008-05-20 20:58:35 -07:00
parent d1418c25d3
commit b2ecaca21e
6 changed files with 51 additions and 12 deletions
@@ -30,6 +30,22 @@ class DeliverablesController < ApplicationController
render :partial => 'common/preview'
end
def create
@deliverable = Deliverable.new(params[:deliverable])
@deliverable.project = @project
respond_to do |format|
if @deliverable.save
@flash = l(:notice_successful_create)
format.html { redirect_to :action => 'index' }
format.js { render :action => 'create.js.rjs'}
else
# TODO: Failed save
end
end
end
private
def find_project
@project = Project.find(params[:id])
+2
View File
@@ -1,4 +1,6 @@
class Deliverable < ActiveRecord::Base
unloadable
belongs_to :project
attr_accessor :overhead
@@ -0,0 +1,9 @@
<tr id="deliverable-<%= deliverable.id %>" class="deliverable <%= cycle('odd', 'even') %>">
<%= content_tag(:td, deliverable.id) %>
<%= content_tag(:td, deliverable.score) %>
<%= content_tag(:td, deliverable.subject) %>
<%= content_tag(:td, number_to_currency(deliverable.cost)) %>
<%= content_tag(:td, number_to_currency(deliverable.spent)) %>
<%= content_tag(:td, format_date(deliverable.due_date)) %>
<%= content_tag(:td, progress_bar(deliverable.progress, :width => '80px')) %>
</tr>
+3 -2
View File
@@ -1,7 +1,8 @@
<h2>New Deliverable</h2>
<% labelled_tabular_form_for :deliverable, @deliverable,
:html => {:multipart => true, :id => 'deliverable-form'} do |f| %>
<% remote_form_for :deliverable, @deliverable, :url => {:controller => 'deliverables', :action => 'create', :id => @project },
:method => :post, :builder => TabularFormBuilder, :lang => current_language,
:html => {:multipart => true, :id => 'deliverable-form', :class => 'tabular'} do |f| %>
<%= error_messages_for 'deliverable' %>
<div class="box">
<div class="splitcontentleft">
+2 -10
View File
@@ -1,5 +1,5 @@
<% form_tag({}) do -%>
<table class="list deliverables">
<table id="deliverable-list" class="list deliverables">
<thead><tr>
<%# TODO: Other sorts %>
<%= sort_header_tag("#{Deliverable.table_name}.id", :caption => '#', :default_order => 'desc') %>
@@ -12,15 +12,7 @@
</tr></thead>
<tbody>
<% deliverables.each do |deliverable| -%>
<tr id="deliverable-<%= deliverable.id %>" class="deliverable <%= cycle('odd', 'even') %>">
<%= content_tag(:td, deliverable.id) %>
<%= content_tag(:td, deliverable.score) %>
<%= content_tag(:td, deliverable.subject) %>
<%= content_tag(:td, number_to_currency(deliverable.cost)) %>
<%= content_tag(:td, number_to_currency(deliverable.spent)) %>
<%= content_tag(:td, format_date(deliverable.due_date)) %>
<%= content_tag(:td, progress_bar(deliverable.progress, :width => '80px')) %>
</tr>
<%= render :partial => 'deliverable', :locals => { :deliverable => deliverable} %>
<% end -%>
</tbody>
</table>
+19
View File
@@ -0,0 +1,19 @@
# If there is no deliverable list, refresh the page
page << "if ($('deliverable-list') == null) {document.location.reload()}"
# Add deliverable to list
page.insert_html :top, 'deliverable-list', :partial => 'deliverable', :locals => {:deliverable => @deliverable}
# Remove errors if found
page.select('#errorExplanation').each do |value|
page.remove value
end
page << "Form.reset($('deliverable-form'))"
# Add a fading out flash
page.insert_html :before, 'new-deliverable', content_tag(:div, @flash, :class => "flash notice", :id => 'rjs-flash')
page.delay(3) do
page.visual_effect :fade, 'rjs-flash'
end