2014-09-06 1 views
1

У меня есть приложение Rail 4, которое использует жемчужину ajaxify_rails. Так загружен только мой контент, но не полная страница. Теперь я определил вспомогательный метод, который я хочу вызвать в каждом представлении как первый оператор. Мой текущий подход делает это явным во всех представлениях, но это сильно дублированный код. Так что я много точек зрения все, начиная сCall Rails helper во всех представлениях подразумевается как первый аргумент

= rails_helper_method 
... 

Есть ли способ, чтобы это подразумевало на каждом представлении, или я просто назвать это снова и снова?

ответ

2

Это то, что для layouts. Просто позвоните своему вспомогательному методу в своем макете, и поскольку ваши представления будут использовать этот макет, ваш метод-помощник также получит вызов. В файле макета вы можете сделать:

%body 
    = rails_helper_method 
    = yield 

Update:

Если посмотреть на ajaxify_rails repo, вы можете вызвать его ajaxify_extra_content метод в application_controller, а затем связать его ajaxify событие. Вы можете сделать что-то вроде этого:

def ajaxify_extra_content 
    ... your extra html ... 
end 

, а затем привязать его следующим образом:

$(document).on 'ajaxify:content_inserted', -> 
    $('#id_of_some_container_in_view').html $('#ajaxify_content #id_of_some_container_in_view').html() 

вы также можете позвонить своим помощникам непосредственно, как это:

def ajaxify_extra_content 
    view_context.your_helper 
end 

PS У меня нет но это должно сработать для вас

+0

В обычных приложениях Rails это сработает, но из-за ajaxify_rails макет не повторится когда пользователь нажимает на ссылку, поэтому вспомогательный метод не будет вызываться при рендеринге нового содержимого. – tbraun89

+1

Спасибо, это сработало, я также нашел другое решение, которое тоже будет готово, Gem 'rails-ajax' может обновлять несколько контейнеров с разными частицами по одному запросу, поэтому вы можете добиться того же результата. – tbraun89

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