2016-07-27 36 views
0

我知道這是一個古老的問題,但我無法解決它.. 我想顯示一個模式中的評論列表,每個迭代都是特定的。Rails:使用數據填充模態

內容的has_many註釋,註釋belongs_to的content`

@contents.each do |content| 
content.title 
button_to('read', category_modal_path(:comment_id => content.id), remote: true, :class=> 'modal-trigger2', 'data-target'=>'modal3') 
end 

控制器

def category_modal 
@comments = Comment.online.where(content_id: params[:comment_id]) 
respond_to do |format| 
    format.js 
end 

模態

<div id="modal3" class="modal modal-fixed-footer"> 
...here I want show the list of comments 

category_modal.js

$('#modal3').html(<%= j(render partial: 'shared/modal2', locals: {comments: @comments})%>); 

咖啡

$('.modal-trigger2').leanModal() 

模態打開,但沒有數據...幫助將是非常不錯..

+0

你檢查了ajax的迴應嗎?如果響應有一些數據。 –

+0

我得到零。可能是我的錯誤。首先想到的是獲取content.id作爲模態中的整數,然後在模態內查詢..但可能有點粗糙? – Werner

回答

0

好了後一個小時的努力,我能夠解決您的問題。按着這些次序。

  1. 首先從咖啡腳本中刪除$('.modal-trigger2').leanModal()。它不需要任何更多。
  2. category_modal.js下面的代碼粘貼

    $('#modal3').html("<div href='#modal3' id='content_<%=params[:comment_id] %>'><%= j(render partial: 'shared/modal2', locals: {comments: @comments})%></div>"); 
    $('#content_<%=params[:comment_id]%>').leanModal(); 
    $('#content_<%=params[:comment_id]%>').trigger('click'); 
    
  3. 您可能需要在您的類別列表添加method: :get如果您的路線是post型不是那麼

    @contents.each do |content| 
        content.title 
        button_to('read', category_modal_path(:comment_id =>content.id), remote: true, :class=> 'modal-trigger2',method: :get) 
    end 
    

還好現在告訴我是什麼問題。 基本上它是leanModal的混亂如果你已經使用bootstap模態它不會是問題。

基本上每當我們在任何元素上調用leanModal它停止它默認從現在起,當它的一些點擊,它打開它表明這是在點擊項目href提及的相應內容的彈出行爲i-e Click左右。

所以當我打電話給$('.SomeClass').leanModal()它會爲所有具有SomeClass類的項目添加一個點擊事件,並在某個點擊它並顯示內容時打開模式。

因此,在你的情況下,當你打電話給$('.modal-trigger2').leanModal()它簡單地爲所有內容按鈕添加一個點擊事件,並在你點擊任何內容時打開彈出窗口。它甚至沒有向服務器發送ajax調用。 正如你知道最初沒有在modal3容器中的任何內容,這就是爲什麼它打開空模態。

所以現在我所做的就是刪除這個調用並移動了category_modal.js 中的所有彈出邏輯。所以,無論您何時點擊一個內容,它都會向服務器發送一個ajax請求。在JS視圖中,我正在做同樣的事情,但現在我在comments周圍添加了一個包裝,並根據您的要求content_id設置了ID。 之後,我在這個新創建的包裝div上調用leanModal。 並觸發其上的click事件,所以模態會自動顯示。

P.S

你不一定需要下面的代碼也將致力於此動態ID的東西。

$('#modal3').html("<div href='#modal3' id='leanModalContainer'><%= j(render partial: 'shared/modal2', locals: {comments: @comments})%></div>"); 
$('#leanModalContainer').leanModal(); 
$('#leanModalContainer').trigger('click'); 
+0

非常感謝..真的很好..我會檢查..格雷斯Werner – Werner

+0

好吧,請讓我知道如果它解決您的問題:) –

+0

到現在..不能讓它工作..1。安全警告:另一個網站上的嵌入式