Rails 3 Adding an ActiveRecord Model Method
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 = in开发者_Go百科dex
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'
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
精彩评论