2013-03-29 2 views
1
def event_calendar_options 
    { 
     :year => @year, 
     :month => @month, 
     :event_strips => @event_strips, 
     :month_name_text => I18n.localize(@shown_month, :format => "%B %Y"), 
     :previous_month_text => "<< " + month_link(@shown_month.prev_month), 
     :next_month_text => month_link(@shown_month.next_month) + " >>" 
    } 
end 

def event_calendar 
    calendar event_calendar_options do |args| 
    event = args[:event] 
    %(<a href="/events/#{event.id}" title="#{h(event.name)}">#{h(event.name)}</a>) 
    end 
end 

Здесь весь event_calendar_options заключен в {}, поэтому он просто возвращает хеш-таблицу?Как понять этот код?

Во-вторых, почему event_calendar_options, метод модуля, может быть передан как параметр в календарь?

+0

Его можно передать как параметр, потому что он возвращает хэш. – depa

ответ

1

Предполагая, что они являются частью одного и того же класса (например, контроллера или модели), event_calendar_options может быть вызван event_calendar. Это обычная практика в классах. Даже если это не так, они могут быть объявлены публичными и называться другими классами (что менее распространено).

И, да, event_calendar_options возвращает хеш-таблицу. В ruby ​​окончательный оператор будет возвращен, если не будет указан оператор return. В этом случае он вернет хеш-таблицу, которая будет повторена методом event_calendar.

+0

Тогда зачем же использовать класс вокруг хэша вместо того, чтобы просто определять хэш напрямую? – OneZero

+0

Это не класс вокруг хэша, это метод. Поскольку мы находимся в контексте класса (как контроллера, так и модели), как мы будем определять хэш любым другим способом, чем определять метод? – depa

+0

Депа правильная. Это метод, и мы не могли понять мотивы автора, не спрашивая их напрямую. Возможно, он используется в нескольких методах или называется из других классов? Если это так, то это будет считаться СУХОЙ подход. –

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