2015-04-06 172 views
2

我試圖使用軌道單元寶石(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。

調用同樣的方式作爲視圖導致無法正常工作 - 軌道不渲染單元調用的結果,而是尋找基於控制器的方法名

模板調用它像這樣:

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:/

山姆

+0

所以,我發現我可以把它像這樣工作: 渲染HTML:電池(:acquired_skills,@ work_history.acquired_skills).show,CONTENT_TYPE: 'text/html的' 我必須明確,否則添加CONTENT_TYPE它返回了text/javascript,並且這樣做阻止了我的AJAX表單回調被觸發, 這有效,但它並不感覺特別幹。 – 2015-04-06 08:43:50

回答

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回調。 – 2015-06-14 13:28:31

+0

爲什麼簡單的html = cell(:comment,@comment).show不起作用,而奇怪的html = cell(:comment,@comment)。(:show)呢?反正什麼樣的ruby語法? – gorn 2017-06-18 22:31:55