Rails 3 Добавление метода ActiveRecord - PullRequest
1 голос
/ 06 июля 2010

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

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'

1 Ответ

4 голосов
/ 07 июля 2010

Вы пытаетесь обратиться к методу instance как метод class .

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...