2017-01-18 14 views
0

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

shared/delete_link.html.erb 

<%= link_to object, 
      method: :delete, 
      data: { confirm: 'Are you sure?' } do%> 
      <span class="glyphicon glyphicon-remove"></span> 
<% end %> 

Я называю частичным, как это; передавая ему объект Я хочу удалить:

<%= render "shared/delete_link", :object => search %> 

Это прекрасно работает для моделей/маршрутов, которые до сих пор в основном приложении, но теперь у меня есть ситуации, как это:

|-controller(main-app) 
|--show(main-app) 
|---partial(engine) 
|----partial-delete-link(main-app) 
|-----link-route(engine) 

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

Как восстановить функциональность, не вставляя много логики в мое представление?

ответ

0

Не переусердствуйте при рефакторинге.

Использование частичного для создания одного элемента вряд ли оптимально. Вместо этого вы можете просто создать вспомогательный метод:

module LinksHelper 
    def link_to_destoy(object, **kwargs) 
    opts = { 
     method: :delete, 
     data: { confirm: 'Are you sure?' } 
    }.deep_merge(kwargs) 
    link_to object, opts do 
     content_tag :span, class: 'glyphicon glyphicon-remove' 
    end 
    end 
end 

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

Чтобы создать ссылку на путь в пространстве имен рельсов вы передаете массив:

# /foos/bars/:id 
<%= link_to_destoy([:foo, bar]) %> 

# /foos/:foo_id/bars/:id 
<%= link_to_destoy([foo, bar]) %> 
+0

Спасибо за помощь. Я знал, что в конце концов я сделаю помощником, но у меня не было идеи, которую вы могли бы передать массиву link_to. Похоже, что он строит путь правильно, но я все равно получаю сообщение об ошибке «undefined method» foo_bar_path для # <# : 0x0 ... bb88> 'Почему это не распознает путь, который появляется, когда я рейка маршрутов? Как я могу сделать вспомогательный тест для этого помощника? – mkrinblk