From 363e8c0c5a5fae2b58f294f413be679dd89fd1ad Mon Sep 17 00:00:00 2001 From: Eric Davis Date: Tue, 20 Jan 2009 16:37:23 -0800 Subject: [PATCH] Converted the Membership rate form to an Ajax remote form. * Changed the form_for to be a remote_form_for * Changed the url to use the js format * Added RJS to add the Saved rate to the rate cell * Added id to the table cell so the rate cell can be replaced on success * Added an Error RJS to flash an error message #1921 --- app/controllers/rates_controller.rb | 11 +++++++++-- app/views/rates/create.js.rjs | 2 ++ app/views/rates/create_error.js.rjs | 5 +++++ app/views/users/_memberships.rhtml | 4 ++-- 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 app/views/rates/create.js.rjs create mode 100644 app/views/rates/create_error.js.rjs diff --git a/app/controllers/rates_controller.rb b/app/controllers/rates_controller.rb index c3a434c..2f7fbc0 100644 --- a/app/controllers/rates_controller.rb +++ b/app/controllers/rates_controller.rb @@ -57,12 +57,19 @@ class RatesController < ApplicationController respond_to do |format| if @rate.save - flash[:notice] = 'Rate was successfully created.' - format.html { redirect_back_or_default(rates_url(:user_id => @rate.user_id)) } + format.html { + flash[:notice] = 'Rate was successfully created.' + redirect_back_or_default(rates_url(:user_id => @rate.user_id)) + } format.xml { render :xml => @rate, :status => :created, :location => @rate } + format.js { render :action => 'create.js.rjs'} else format.html { render :action => "new" } format.xml { render :xml => @rate.errors, :status => :unprocessable_entity } + format.js { + flash.now[:error] = 'Error creating a new Rate.' + render :action => 'create_error.js.rjs' + } end end end diff --git a/app/views/rates/create.js.rjs b/app/views/rates/create.js.rjs new file mode 100644 index 0000000..d93ea94 --- /dev/null +++ b/app/views/rates/create.js.rjs @@ -0,0 +1,2 @@ +element = 'rate_' + @rate.project_id.to_s +page.replace_html element, "#{link_to number_to_currency(@rate.amount), { :action => 'edit', :id => @rate.user, :tab => 'rates'} }" diff --git a/app/views/rates/create_error.js.rjs b/app/views/rates/create_error.js.rjs new file mode 100644 index 0000000..74a0050 --- /dev/null +++ b/app/views/rates/create_error.js.rjs @@ -0,0 +1,5 @@ +content = render_flash_messages +page.select("div.flash").each do |value, index| + page.hide value +end +page.insert_html :top, 'content', content diff --git a/app/views/users/_memberships.rhtml b/app/views/users/_memberships.rhtml index df24f41..e64e580 100644 --- a/app/views/users/_memberships.rhtml +++ b/app/views/users/_memberships.rhtml @@ -23,7 +23,7 @@ <%= link_to l(:button_delete), {:action => 'destroy_membership', :id => @user, :membership_id => membership }, :method => :post, :class => 'icon icon-del' %> <%# TODO: Hook %> - + <% rate = Rate.for(@user, membership.project) %> <% if rate.default? || rate.nil? %> @@ -31,7 +31,7 @@ <%= number_to_currency(rate.amount) %> <% end %> - <% form_for(:rate, :url => rates_path) do |f| %> + <% remote_form_for(:rate, :url => formatted_rates_path('js')) do |f| %> <%= f.text_field :amount %> <%= f.hidden_field :date_in_effect, :value => Date.today.to_s %>