Forum: Ruby on Rails checkboxes validation

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
George G. (Guest)
on 2007-05-17 08:49
Hi Guys
i have this method for finding a list of items via check-boxes
    def selected
        conditions = [[]]
        params[:result].each do |result_id|
            conditions.first << 'feature.uniquename=?'
            conditions << result_id
            end


         conditions[0] = conditions.first.join(' OR ')
         conditions=['1=1'] if conditions.empty?

         @items= Feature.find(:all, :conditions => conditions)
     end

however when no checkbox is checked and one  hits the select button i
get this error.
"NoMethodError (You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.each):"


i would like to either trap the error and display it in a "friendly way"
or not display anything at all.

i tried this in my view but it does not seem to help
<% if @items.length > 0 %>

<removed_email_address@domain.invalid do|item|%>
<b>><%=item.uniquename%></b>
<%end%>

<%else%>
<b>no selection</b>
<%end%>


Thank you.
Keynan P. (Guest)
on 2007-05-17 09:11
     def selected
         conditions = [[]]
         params[:result].each do |result_id|
             conditions.first << 'feature.uniquename=?'
             conditions << result_id
         end if params[:result]


          conditions[0] = conditions.first.join(' OR ')
          conditions=['1=1'] if conditions.first.empty?

          @items= Feature.find(:all, :conditions => conditions)
      end
Keynan P. (Guest)
on 2007-05-17 09:13
i meant

      def selected
          conditions = [[]]
          params[:result].each do |result_id|
              conditions.first << 'feature.uniquename=?'
              conditions << result_id
          end if params[:result]


           conditions[0] = conditions.first.join(' OR ')
           conditions=['1=1'] if !conditions.first or conditions.first
== ''

           @items= Feature.find(:all, :conditions => conditions)
       end
George G. (Guest)
on 2007-05-17 09:46
Keynan P. wrote:
> i meant
>
>       def selected
>           conditions = [[]]
>           params[:result].each do |result_id|
>               conditions.first << 'feature.uniquename=?'
>               conditions << result_id
>           end if params[:result]
>
>
>            conditions[0] = conditions.first.join(' OR ')
>            conditions=['1=1'] if !conditions.first or conditions.first
> == ''
>
>            @items= Feature.find(:all, :conditions => conditions)
>        end


Thanks Keynan!
How would i pass a message to the user informing him to make a
selection?
This is because with no selection the method seems make the browser
hang, till i manually stop the execution.
Keynan P. (Guest)
on 2007-06-04 10:12
the browser should not be hanging. pop in a few logger.debug statements
to find where your trapped in a loop.

As for notifying the user


def selected
          conditions = [[]]
          if params[:result]
            params[:result].each do |result_id|
              conditions.first << 'feature.uniquename=?'
              conditions << result_id
            end
          else
            flash[:notice] = 'Please select a feature name.'
          end


           conditions[0] = conditions.first.join(' OR ')
           conditions=['1=1'] if !conditions.first or conditions.first
== ''

           @items= Feature.find(:all, :conditions => conditions)
       end
This topic is locked and can not be replied to.