2010-01-21 2 views
1

У меня есть простой модуль для добавления текущего пользователя на вновь созданный объект:Ruby on Rails - одна модель может видеть модуль, другой - нет?

module AttachUsers 

    def create_with_author(author, params) 
    created = new(params) 
    created.author = author 
    created.save 
    created 
    end 

    def create_with_author_and_editor(author, params) 
    created = new(params) 
    created.author = author 
    created.lasteditor = author 
    created.save 
    created 
    end 

end 

Модуль сохранен как attach_users.rb непосредственно под Lib каталога.

Я пытался использовать этот модуль с двумя моделями. Он работал отлично с первой (комментарий) моделью, однако второй (страница) возвращает сообщение об ошибке

undefined method `create_with_author_and_editor' 

У меня есть следующий в верхней части каждого из моих моделей:

extend AttachUsers 

Я используя его в контроллер комментарии, как это:

@comment = @post.comments.create_with_author(current_user, params[:comment]) 

И в регуляторе страницы, как это:

@page = Page.new 
respond_to do |format| 
if @page.create_with_author_and_editor(current_user, params[:page]) 

Может ли кто-нибудь понять, почему он может работать неправильно? Это первый раз, когда я пытался использовать модули, извините, если это что-то очевидное.

Любые советы, оцененные.

Благодаря

+0

Где модуль сохранен? – Matchu

+0

Непосредственно под каталогом lib – Dan

ответ

2

Попробуйте использовать include AttachUsers вместо extend AttachUsers.

Кроме того, это не так, как я бы сделал это. Возможно, вам лучше использовать расширения для расширений.

module CreateWithAuthorAndEditor 
    def create_with_author(author, params) 
    create(params.merge({ :author => author }) 
    end 
end 

class Post< ActiveRecord::Base 
    has_many :comments :extend => CreateWithAuthorAndEditor 
end 

Тогда вы можете позвонить:

post.comments.create_with_author(current_user, params[:comment]) 
+0

Спасибо. Раньше я этого не слышал. Я проверю их! – Dan

+0

Я не уверен, трудно сказать, что делает ваш код в комментарии. – jonnii

+0

@Dan, Just FYI, 'extend' эффективно добавляет методы как методы класса,' include' добавляет методы в качестве методов экземпляра. Поэтому, если вы хотите 'Page.create_with_author_and_editor', вы хотите использовать' extend'. –

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