LoadError - Ожидается определение. Ошибка Rails при вызове модуля - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть модуль EntityTrackerHelper. Вот код:

module EntityTrackerHelper
    def self.createUserAction(user_id, type, entity_id)
        existingua = UserAction.find(:first, :conditions=> ["user_id = ? and type = ? and entity_id=?", user_id, type, entity_id])
        if existingua.nil?
            ua = UserAction.new
            ua.user_id = user_id
            ua.type = type
            ua.entity_id = entity_id
            ua.date = Time.now
            ua.save
        else
            existingua.date = Time.now
            existingua.save
        end
    end
end

Используется для отслеживания изменений и доступа пользователей в сущности. Он используется в контроллере следующим образом.

require "#{Rails.root}/lib/EntityTrackerHelper"
class LessonSectionsController < InheritedResources::Base
    def index
      user_id = params[:user_id]
      lesson_id = params[:lesson_id]
      EntityTrackerHelper::createUserAction(user_id, 'LESSON', lesson_id)
      lessonSections = LessonSection.find(:all, :conditions => { :lesson_id => params[:lesson_id] })
      render :json => {:sections => lessonSections.as_json({:only => [:lesson_id,:id,:name]}), :error => ''}
    end
end

Я получаю следующую ошибку:

LoadError (Expected /<ProjPath>/<ProjName>/app/models/lesson.rb to define LESSON):
  lib/EntityTrackerHelper.rb:12:in `createUserAction'
  app/controllers/lesson_sections_controller.rb:9:in `index'

Строка 12 в EntityTrackerHelper равна UserAction.find...

Есть идеи?

Спасибо

Ответы [ 2 ]

3 голосов
/ 27 декабря 2011

ActiveRecord будет использовать поле type для «наследования одной таблицы».См. http://api.rubyonrails.org/classes/ActiveRecord/Base.html (подзаголовок: наследование одной таблицы).

Это означает, что при загрузке UserAction с типом LESSON ActiveRecord попытается создать экземпляр класса LESSON, который неопределены.

Возможно, вам следует использовать другое имя для столбца type.

0 голосов
/ 27 декабря 2011

Вы можете попробовать использовать

**include EntityTrackerHelper**

для получения дополнительной информации проверьте эту ссылку Вызов функции модуля из контроллера (NoMethodError)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...