def update
respond_to do |format|
if logged_in_user.spec.nil?
@spec = Spec.new(params[:spec])
@spec["user_id"] = logged_in_user.id
if @spec.save
format.js do
render :update do |page|
page.form.reset 'login_form'
page.redirect_to user_path(logged_in_user)
end
end
else
format.js do
render :update do |page|
page << "$('message_popup').popup.show();"
end
end
end
else
if logged_in_user.spec.update_attributes(params[:spec])
format.js do
render :update do |page|
page.redirect_to user_path(logged_in_user)
end
end
else
format.js do
render :update do |page|
page << "$('message_popup').popup.show();"
end
end
end
end
end
end
Refactorings
No refactoring yet !
Adam
January 27, 2009, January 27, 2009 06:08, permalink
class SpecsController < ApplicationController
def update
@spec = logged_in_user.spec || logged_in_user.build_spec
spec_was_a_new_record = @spec.new_record?
render :update do |page|
if @spec.update_attributes(params[:spec])
page.form.reset 'login_form' if spec_was_a_new_record
page.redirect_to user_url(logged_in_user)
else
page.popup.show 'message_popup'
end
end
end
end
var Popup = {
show: function(element) {
$(element).popup.show();
}
}
pypiyush.myopenid.com
January 31, 2009, January 31, 2009 20:09, permalink
Try this out If It could be beneficial to You... I have moved the statements related to storing spec details in "spec" model. You can use the same method "save_spec_details" to create as well as save records.
def update
@spec = logged_in_user.spec.nil? ? Spec.new : logged_in_user.spec
params[:spec].merge{(:user_id => logged_in_user.id )}
spec_status = @spec.save_spec_details(params[:spec])
render :update do |page|
if spec_status.blank?
page.form.reset 'login_form' if spec_was_a_new_record
page.redirect_to user_url(logged_in_user)
else
# Display Validation messages in appropriate div element of the page.
# page.replace_html "div_name", spec_status.full_messages.join("<br>")
page << "$('message_popup').popup.show();"
end
end
end
ClassSpec < ActiveRecord::Base
def save_spec_details(parameters)
spec = self.new_record? ? Spec.create(parameters) : self.update_attributes(parameters)
return spec.errors
end
end
I have a rails specific question(hopefully I can still get some help) with using the update action to either create a new object if it doesn't exist, or update it if it already exists. I'm not even sure if the implementation is right, but if it is, I know this can be refactored somehow.