Ruby on Rails - одна модель может видеть модуль, другая не может? - PullRequest
1 голос
/ 22 января 2010

У меня есть простой модуль для добавления текущего пользователя во вновь созданный объект:

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])

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

Любой совет приветствуется.

Спасибо

1 Ответ

2 голосов
/ 22 января 2010

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