I have a form that unfortunatly is not associated with a model as it  
is created dynamically based on selections from a user. I have a  
validation action called validate_the_form to make sure that fields  
the user signifies as required are acctually required. On submit I  
run the validation and redirect to the the form if there are any  
errors displaying the errors on top. Really I want to mimic the way  
that validate works in a model where there are errors on top as well  
as highlighting the fields that are missing the info that is needed  
but I also want to keep the values that are correct selected and  
filled out.
I was taking a look at the options for form_remote_tag and figured  
that I could submit the form via ajax and have set up the form remote  
tag like this:
<%= form_remote_tag(:url => { :action =>
''validate_the_form''},
                     :update => { :success => "form_area",
:failure
=> "error_area" }) %>
my question is I am not sure where to go from here. i can''t figure  
out how to define what is a failure. Am I going down the right track?  
or is there another way to do this? I also looked in my copy of Agile  
Web Dev and they have an example but it does not keep values that are  
selected and or filled out in the form if there is a failure.
Thanks for all the help
Andrew
On a side note I did look at the example on the wiki as well as this one "Validations for non-ActiveRecord Model Objects" but I don''t think that they will work for me as I don''t have a model for this form. The form is built dynamically based on several other models but because the options that I need to validate are not constant (for example a set of radio buttons could require that there is a choice or not require one at all) based on what the user defines. Since these fields are completely unknown I am not sure where to go. Andrew On Dec 8, 2005, at 7:09 PM, Andrew Filipowski wrote:> I have a form that unfortunatly is not associated with a model as > it is created dynamically based on selections from a user. I have a > validation action called validate_the_form to make sure that fields > the user signifies as required are acctually required. On submit I > run the validation and redirect to the the form if there are any > errors displaying the errors on top. Really I want to mimic the way > that validate works in a model where there are errors on top as > well as highlighting the fields that are missing the info that is > needed but I also want to keep the values that are correct selected > and filled out. > > I was taking a look at the options for form_remote_tag and figured > that I could submit the form via ajax and have set up the form > remote tag like this: > > <%= form_remote_tag(:url => { :action => ''validate_the_form''}, > :update => { :success => "form_area", :failure > => "error_area" }) %> > > my question is I am not sure where to go from here. i can''t figure > out how to define what is a failure. Am I going down the right > track? or is there another way to do this? I also looked in my copy > of Agile Web Dev and they have an example but it does not keep > values that are selected and or filled out in the form if there is > a failure. > > Thanks for all the help > > Andrew > _______________________________________________ > Rails mailing list > Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org > http://lists.rubyonrails.org/mailman/listinfo/rails
>Here is a very nice way of still being able to use validations without the need for a database model. It just fakes rails out into thinking the model is an AR model and you just cant .save it , you call .valid? on it to check the validations: class Contact < ActiveRecord::Base def self.columns() @columns ||= []; end def self.column(name, sql_type = nil, default = nil, null = true) columns << ActiveRecord::ConnectionAdapters::Column.new (name.to_s, default, sql_type.to_s, null) end column :name, :string column :city, :string column :state, :string column :phone, :string column :email_address, :string validates_presence_of :name, :email_address end Cheers- -Ezra Zygmuntowicz WebMaster Yakima Herald-Republic Newspaper ezra-gdxLOakOTQ9oetBuM9ipNAC/G2K4zDHf@public.gmane.org 509-577-7732 _______________________________________________ Rails mailing list Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org http://lists.rubyonrails.org/mailman/listinfo/rails
On Dec 8, 2005, at 6:24 PM, Ezra Zygmuntowicz wrote:>> > > Here is a very nice way of still being able to use validations > without the need for a database model. It just fakes rails out into > thinking the model is an AR model and you just cant .save it , you > call .valid? on it to check the validations: > > class Contact < ActiveRecord::Base > def self.columns() @columns ||= []; end > def self.column(name, sql_type = nil, default = nil, null = true) > columns << ActiveRecord::ConnectionAdapters::Column.new > (name.to_s, default, sql_type.to_s, null) > end > > column :name, :string > column :city, :string > column :state, :string > column :phone, :string > column :email_address, :string > > validates_presence_of :name, :email_address > end > >Oh and I forgot to credit technoweenie for writing it ;-) -Ezra Zygmuntowicz WebMaster Yakima Herald-Republic Newspaper ezra-gdxLOakOTQ9oetBuM9ipNAC/G2K4zDHf@public.gmane.org 509-577-7732 _______________________________________________ Rails mailing list Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org http://lists.rubyonrails.org/mailman/listinfo/rails
I looked at that but not sure that it will work in my situation. as I  
don''t know what will be required or not ahead of time. Since I
don''t
know what will be required I can''t define the validate_presence_of  
the fields. Also I don''t know what the field names are ahead of time  
either. They are generated on the fly when the page is rendered. Here  
is a look at my validate method that I have written. I think I am on  
the right track writing my own action just not sure how to repopulate  
the fields if there is an error.
def validate_the_form
		@errors = []
		@ theform = Form.find(params[: theformid])
		# loop through all the fields to validate the responses given match  
the requirements defined
		# by the form author
		@form.questions.each do |@question|
			# Check to see if the question is required
			if @question.required == 1
				# we need to do something special to validate if the checkbox  
type is required
				# here we check to see if it is a checkbox
				if @question.field_type == ''checkbox''
					# if it is a check box we loop thru the choices to check if they  
are checked
					counter = 0
					@question.choices.each do |@choice|
						if params["#{@choice.id}question_#{@question.id}"] != nil
							counter = counter + 1
						end
					end
					# if no check boxes are checked we kick out an error
					if counter == 0
						@errors << "#{@question.question_text}"
					end
				# if it is not a checkbox we make sure that there is not a null  
value
				else
					if params["question_#{@question.id}"] == nil or params 
["question_#{@question.id}"] == ''''
						@errors << "#{@question.question_text}"
					end
				end
			end
			# we next check our checkbox type to make sure that the minimum and
			# maximum values defined by the offer are adhered to
			if @question.field_type == ''checkbox''
				# make sure that maximum responses are adhered to
				if @question.max_responses != nil
					if checked > @question.max_responses
						@errors << "#{@question.question_text} to many responses"
					end
				end
				# make sure that minimum responses are adhered to
				if @question.min_responses != nil
					if checked < @question.min_responses
						@errors << "#{@question.question_text} to few responses"
					end
				end
			end
		end
		# if we have no errors submit the form other wise we kick back to  
the form
		if @errors.size == 0
			submit_the_form
		else
			render :action => ''take'', :id => @theform.id, :errors
=> @errors
		end
	end
my view right now has allot of logic in it to build the form. I think  
that I should be using helpers for it but it works right now. This  
app is in scaffold stage right now. I just want to get it working and  
than will go back and do some code cleanup during the the time that I  
make the views pretty.
here is just a piece of the view:
<div id="error_area">
<% if params[:errors] != nil %>
	<% 0.upto(params[:errors].size - 1) do |x| %>
		The Question: <%= params[:errors][x] %><br/>
		Is Required<br/><br/>
	<% end %>
<% end %>
<p style="color: red"><%= flash[:notice] %></p>
</div>
<%= @theform.name %>
<div id="form_area">
<%= form_remote_tag(:url => { :action =>
''validate_the_form''},
                     :update => { :success => "form_area",
:failure
=> "error_area" }) %>
	<%= hidden_field_tag(: theformid, @ theform.id) %>
	<% @questions.each do |@question| %>
		<%= @question.question_text %><br/>
			<% if @question.field_type == ''radio'' %>
				<% @question.choices.each do |@choice| %>
					<% questionid = "question_#{@question.id}" %>
					<%= radio_button_tag("question_#{@question.id}",  
@choice.choice_text) %><%= h(@choice.choice_text) %><br/>
				<% end %>
I than go through a bunch of more elsifs to create the different  
fields (checkbox, textfield, textarea and so on)
<%= submit_tag ''Submit'' %>
<%= end_form_tag %>
</div>
As I said I think that I am heading in the right direction I am just  
not sure how to kick back a failure from the validate method to the  
form_remote_tag
Andrew
On Dec 8, 2005, at 9:40 PM, Ezra Zygmuntowicz wrote:
>
> On Dec 8, 2005, at 6:24 PM, Ezra Zygmuntowicz wrote:
>
>>>
>>
>> Here is a very nice way of still being able to use validations  
>> without the need for a database model. It just fakes rails out  
>> into thinking the model is an AR model and you just cant .save  
>> it , you call .valid? on it to check the validations:
>>
>> class Contact < ActiveRecord::Base
>>   def self.columns() @columns ||= []; end
>>   def self.column(name, sql_type = nil, default = nil, null = true)
>>     columns << ActiveRecord::ConnectionAdapters::Column.new 
>> (name.to_s, default, sql_type.to_s, null)
>>   end
>>
>>   column :name,          :string
>>   column :city,          :string
>>   column :state,         :string
>>   column :phone,         :string
>>   column :email_address, :string
>>
>>   validates_presence_of :name, :email_address
>> end
>>
>>
>
>
> Oh and I forgot to credit technoweenie for writing it ;-)
>
> -Ezra Zygmuntowicz
> WebMaster
> Yakima Herald-Republic Newspaper
> ezra-gdxLOakOTQ9oetBuM9ipNAC/G2K4zDHf@public.gmane.org
> 509-577-7732
>
> _______________________________________________
> Rails mailing list
> Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
> http://lists.rubyonrails.org/mailman/listinfo/rails
_______________________________________________
Rails mailing list
Rails-1W37MKcQCpIf0INCOvqR/iCwEArCW2h5@public.gmane.org
http://lists.rubyonrails.org/mailman/listinfo/rails