ActionView::Template::Error (comparison of Fixnum with nil failed):

Hello I’m a newbie,

Our server went down recently and now I’m getting page not found when I try to purchase a product.

Ruby 1.9.3, Rails 3.21

Here’s the information from the log file.

ActionView::Template::Error (comparison of Fixnum with nil failed):

3: <% end %>

4: <div id="checkout">

5:   <h1><%= t("checkout")%></h1>

6:   <%= checkout_progress %>

7:   <br clear="left" />

8:   <%= render "shared/error_messages", :target => @order %>

9:     <%if @order.state != "confirm"%>

app/helpers/checkout_helper.rb:16:in `<’

app/helpers/checkout_helper.rb:16:in `checkout_progress’

app/helpers/checkout_helper.rb:9:in `map’

app/helpers/checkout_helper.rb:9:in `checkout_progress’

app/views/checkout/edit.html.erb:6:in `_app_views_checkout_edit_html_erb___1936024257_23456254125680_0’

app/views/checkout/edit.html.erb

<% content_for :head do %> <%= javascript_include_tag ‘checkout’, ‘/states’ %> <% end %>

<%= t("checkout")%>

<%= checkout_progress %>
<%= render "shared/error_messages", :target => @order %> <%if @order.state != "confirm"%> <%= hook :checkout_summary_box do %>
<%= render 'summary', :order => @order %>
<% end %> <%end%>
<%= form_for @order, :url => update_checkout_path(@order.state), :html => { :id => "checkout_form_#{@order.state}" } do |form| %> <%= render @order.state, :form => form %> <% end %>

Any ideas?

the error is in checkout_helper line 16. Can you post that method?

Checkout help

module CheckoutHelper

def checkout_progress if Gateway.current and Gateway.current.payment_profiles_supported? states = %w(address delivery payment confirm complete) else states = %w(address delivery payment complete) end items = states.map do |state| text = t(“order_state.#{state}”).titleize

css_classes = current_index = states.index(@order.state) state_index = states.index(state)

if state_index < current_index css_classes << ‘completed’ text = link_to text, checkout_state_path(state) end

css_classes << ‘next’ if state_index == current_index + 1 css_classes << ‘current’ if state == @order.state css_classes << ‘first’ if state_index == 0 css_classes << ‘last’ if state_index == states.length - 1 # It’d be nice to have separate classes but combining them with a dash helps out for IE6 which only sees the last class content_tag(‘li’, content_tag(‘span’, text), :class => css_classes.join(‘-’)) end content_tag(‘ol’, raw(items.join(“\n”)), :class => ‘progress-steps’, :id => “checkout-step-#{@order.state}”) end

def address_field(form, method, id_prefix = “b”, &handler) content_tag :p, :id => [id_prefix, method].join, :class => “field” do if handler handler.call else is_required = Address.required_fields.include?(method) separator = is_required ? ‘*
’ : ‘
’ form.label(method) + separator.html_safe + form.text_field(method, :class => is_required ? ‘required’ : nil) end end end

def address_state(form, country) country ||= Country.find(Spree::Config[:default_country_id]) have_states = !country.states.empty? state_elements = [ form.collection_select(:state_id, country.states.order(:name), :id, :name, {:include_blank => true}, {:class => have_states ? “required” : “hidden”, :disabled => !have_states}) + form.text_field(:state_name, :class => !have_states ? “required” : “hidden”, :disabled => have_states) ].join.gsub(‘"’, “'”).gsub(“\n”, “”)

form.label(:state, t(:state)) + ‘*
’.html_safe + content_tag(:noscript, form.text_field(:state_name, :class => ‘required’)) + javascript_tag(“document.write("#{state_elements.html_safe}");”) end

end

if state_index < current_index

either one or the other is nil, that’s your problem.

if state_index < current_index

either one or the other is nil, that’s your problem.

Oscar Del Ben

Sent with Sparrow

Hi Oscar,

I’m very new. Do I need to delete the block of code “if state_index < current_index” ?

No, and we can’t help you here because it really depends on the business logic. I recommend you find someone (offline) experienced that helps you with that problem.

Ok thank you

If it used to work and now does not then something must have changed. Perhaps you can work out what has changed somehow.

Colin