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