2013-06-20 92 views
4

我正在構建一個Web應用程序,它具有UI分爲兩部分的菜單欄和一個內容區域。 菜單欄中列出了用戶編寫的所有博客的標題。點擊標題時,內容區域應該更改爲顯示該博客的帖子。Rails:點擊部分分區

1)所以,我的菜單欄上,我有:

而在我的內容區域,我有:

<div id="contenthere"></div> 

2)因此,通過我的理解,這應該引起博客控制器的展示方法。在那裏,我的方法如下:

@blog = Blog.find(params[:id]) 

respond_to do |format| 
    format.js { render :show_blog } 
end 

3)哪些應該去尋找一個名爲show_blog.js.erb的意見/博客文件夾文件:

$("#contenthere").html("<%=escape_javascript(render :partial=>"show_blog")%>"); 

這將需要我div,並在此處顯示_show_blog.html.erb部分(位於博客視圖文件夾中),博客參數等於在我的博客控制器中設置的@blog參數。

4)所以,我型我秀博客偏有這樣的代碼:

<%[email protected] %> 
<%[email protected]_id %> 

編輯:其實,我四處搜尋,發現了,我不能在資產中使用的方法「渲染」從文件夾 - - 那我把js.erb放在哪裏?我已將它移動到博客視圖文件夾,主視圖文件夾(index.html.erb),並只是/ view /文件夾...錯誤消失了,但鏈接不工作...

編輯:把show_blog.js.erb放入我的views/blogs文件夾中,因爲這是博客控制器調用它。當我點擊鏈接並沒有在控制檯中顯示JS錯誤時沒有任何事情發生。 js是否被稱爲?

編輯:改變以反映我的最終答案。

+0

你試過:'$(「# (...)「(%);(」<%= render('show_blog',:blog => @ blog)%>「);'移除'j(...)' – claptimes

+0

您應該使用'escape_javascript(render ..) '而不是'j(render ...)' 知道錯誤是來自渲染部分還是來自控制器也是有價值的。嘗試'render'show_blog''(如果它在與控制器名稱相同的目錄中)而不是使用符號 – user2261892

+0

實際上,我發現這是因爲無法從資產文件夾調用渲染......哪個文件夾我將show_blog.js.erb文件移動到? – ays0110

回答

0

最終很簡單的解決方案---部分是要求blog.title,blog.user_id,但@blog是通過的實際參數。只需更改爲@ blog.title和@ blog.user_id。

1
@blog = Blog.find(params[:id]) 

respond_to do |format| 
    format.js { render :show_blog } 
end 

這不是Rails的默認邏輯。

你沒有提供的,方法是如何被調用,假設

def show_blog 
    @blog = Blog.find(params[:id]) 
    respond_to do |format| 
     format.js 
    end 
    end 

然後,Rails會尋找show_blog.js.erbviews/blogs並呈現該文件。

此外,您還需要實際的實例傳遞給部分,因爲patrial是代碼的獨立塊,不知道什麼是@blog:

$("#contenthere").append("<%=j render :partial=>"show_blog", :locals=>{:@blog=>@blog}%>"); 
+0

嗯,實際上,最後,只需編寫render:show_blog就可以正常工作,因爲它會查找標題爲show_blog的js文件。我不需要定義一個名爲show_blog的新方法。此外,該部分能夠從博客控制器中的@博客獲取@博客的實例,該博客控制器通過第一個鏈接中的id參數獲取該博客。編輯後問題中的最終解決方案應該可以正常工作,並且體積稍小一些。 – ays0110

+0

@ ays0110,方法只是顯示Rails邏輯,我提供了名稱來顯示Rails的外觀和位置,實際上,您只是在我的回答後編輯了您的問題。 (不提,這個問題應該是問題和答案應該是答案,並且搞砸了這個問題阻止了整個步驟對其他用戶有幫助) –