2015-04-06 7 views
2

Я пытаюсь использовать Rails Cell Gem (https://github.com/apotonick/cells), но у меня возникают проблемы с отображением ячейки от контроллера и.Рендеринг ячейки рельсов с контроллера с неявной моделью

Это моя клетка (упрощенно):

class AcquiredSkillsCell < Cell::ViewModel 
    def show 
    render 
    end 

    def has_acquired_skills? 
    model.count > 0 
    end 
end 

и в стандартном виде ERB я могу клеточным это так:

<%= cell(:acquired_skills, wh.acquired_skills).show %> 

И клетка делает просто отлично.

Но в другом месте кода мне нужно отобразить эту ячейку с контроллера (в результате вызова AJAX), и я не могу понять API.

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

Calling это так :

render_cell(:acquired_skills, wh.acquired_skills).show 

дает: AbstractController :: ActionNotFound (действие '#' не может быть найдено для AcquiredSkillsCell)

Назвать это так:

render_cell(:acquired_skills, :show, @work_history.acquired_skills) 

дает: ArgumentError в AcquiredSkillsController # создать неверное число аргументов (1 для 0)

Что означает это пропускание аргумента методы шоу ... Я мог бы определить шоу с аргументом, но потом я выиграл» t получить неявную переменную экземпляра модели.

Любые идеи? Я думаю, что это было бы легче, если бы я мог найти документацию по API для render_cell:/

Sam

+0

Итак, я нашел, что я могу заставить его работать так: рендеринга HTML: клетка (: acquired_skills, @ work_history.acquired_skills) .Show, content_type: 'текст/html' Я должен был явно добавить CONTENT_TYPE иначе он возвратил текст/javascript, и это предотвратило мой обратный вызов формы AJAX от обжига, Это работает, но он не чувствует себя особенно СУХОЙ. –

ответ

2

Вам следует обновить к ячейкам 4. Вызов в контроллер и вид идентичны.

html = cell(:comment, @comment).(:show) 

Именно тогда до вас, как использовать, что в контроллере - ячейка ничего не знает о HTTP не знает, следовательно, вы должны вызвать render html: html или что-то, что.

+0

Спасибо, Ник. В итоге я назвал это следующим: render html: cell (: comment, @comment) .show.html_safe, content_type: 'text/html' Я нашел, что html_safe и content_type необходимы для правильной визуализации от обратного вызова AJAX. –

+0

Почему простой html = cell (: comment, @comment) .show НЕ работает, а странная html = cell (: comment, @comment). (: Show) делает? Что это за рубиновый синтаксис? – gorn