views:

28

answers:

1

I have the following models but I cannot get the custom method reorder_action_items to work. I am obviously missing something basic.

class ActionList < ActiveRecord::Base
  has_many :action_items

  scope :today, lambda { 
    where("day = ?", Date.today)
  }

  def self.reorder_action_items(new_order)
    new_order.each_with_index do |item, index|
      ai = self.action_items.find(item)
      ai.sort_order = index
      ai.save
    end
  end
end

class ActionItem < ActiveRecord::Base
  belongs_to :action_list
end

Here is the action from my controller.

def update_order
  @idlist = params[:id]
  @todays_list = ActionList.today.reorder_action_items(@idlist)
end

Here is the log output for the error.

Started POST "/welcome/update_order" for xxx.xxx.xxx.xx at 2010-07-06 13:50:46 -0500
  Processing by WelcomeController#update_order as */*
  Parameters: {"id"=>["3", "1", "2"]}
  SQL (0.2ms)   SELECT name
 FROM sqlite_master
 WHERE type = 'table' AND NOT name = 'sqlite_sequence'
Completed   in 14ms

NoMethodError (undefined method `action_items' for #<Class:0xa062cb4>):
/home/matthew/.rvm/gems/ruby-1.9.2-head/gems/activerecord-3.0.0.beta4/lib/active_record/base.rb:1041:in `method_missing'
A: 

You're trying to access an instance method as a class method.

def self.reorder_action_items(new_order)
   new_order.each_with_index do |item, index|
      # here, self is not an instance of ActionList 
      #    and action_items is an instance method
      ai = self.action_items.find(item)
      ai.sort_order = index
      ai.save
   end
end
j.
Thanks that enabled me to fix my issue.
MHinton
You're welcome!
j.