Рубиновые переменные и переменные экземпляра - PullRequest
2 голосов
/ 20 мая 2010

Есть ли лучший способ передачи параметров смешанным методам?

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

Предпосылкой для этого является то, что у нас есть контроллер Rails, который выполняет публикацию контента, но другие контроллеры и даже модели должны иметь возможность «выступать в качестве публикаторов», поэтому я превращаю методы контроллеров в модуль, который я ' я буду смешивать по мере необходимости.

Вот, например, код из Rails Controller, который должен «выступать в роли издателя» и вызывать смешанный метод question_xhtml () ...

def preview
    @person = Person.find params[:id]
    @group = Group.find params[:parent_id]
    @div = Division.find params[:div_id]
    @format = 'xhtml'
    @current_login = current_login
    xhtml = person_xhtml() # CALL TO MIXED-IN METHOD
    render :layout => false
end

В конечном счете, question_xhtml нуждается во всем этом! Является ли этот подход разумным, или было бы лучше сделать

def preview
    person = Person.find params[:id]
    group = Group.find params[:parent_id]
    div = Division.find params[:div_id]
    format = 'xhtml'
    xhtml = person_xhtml(person, group, div, format) # CALL TO MIXED-IN METHOD
    render :layout => false
end

... или что-то еще?

1 Ответ

0 голосов
/ 20 мая 2010

Я думаю, вы должны быть в состоянии сделать:

module ActAsPublisher
  def person_xhtml
    do_stuff_with(@person, @group, @div, @format, @current_login)
    # eg. use instance variable directly in the module
  end
end

class WhateverController < Application Controller
  act_as_publisher
  ...
end

если вы использовали скрипт / сгенерировать плагин act_as_publisher.

...