2010-07-06 4 views
1

У меня есть следующие модели, но я не могу заставить настраиваемый метод reorder_action_items работать. Я, очевидно, пропустил что-то основное.Rails 3 Добавление метода модели ActiveRecord

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 

Это действие моего контроллера.

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

Здесь выводится сообщение об ошибке.

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' 
+0

Что именно вы хотите сделать и какую ошибку вы получаете (если есть)? –

+0

Что происходит? Когда вы вызываете ActionList.reorder_action_items (order), он вызывает ошибку, отсутствующую в методе? – robertokl

+0

Что возвращает 'ActionList.today'? –

ответ

4

Вы пытаетесь получить доступ к экземпляра метод как методкласса.

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 
+0

Спасибо, что позволило мне исправить мою проблему. – MHinton

+0

Добро пожаловать! –

Смежные вопросы