2017-04-12 45 views
0

我有下面的代碼,它不工作導軌 - 語法替代渲染當集合爲空

$('div').html("<%= escape_javascript (render partial: 'comments/image_comment', 
            collection: @image_comments || render html: "<strong>Not Found</strong>".html_safe) %>"); 

我也試過這個

$('div').html("<%= escape_javascript (render (partial: 'comments/image_comment', 
            collection: @image_comments) || render (html: "<strong>Not Found</strong>".html_safe)) %>"); 

我不能使用簡寫render @image_comments一些因爲當我做軌道使用部分我已經命名_comments.html.erb而不是_image_comments.html.erb,我不知道爲什麼。

錯誤

SyntaxError (/show_comments.js.erb:4: syntax error, unexpected tLABEL, expecting keyword_do or '{' or '(' 
[email protected]_comments || render html: "<strong>Not Found</strong>"... 
...        ^
/show_comments.js.erb:4: syntax error, unexpected ')', expecting keyword_end 
...ot Found</strong>".html_safe));@output_buffer.safe_append='... 
+0

什麼錯誤得到,U可以發佈? – 7urkm3n

+0

Ruby實際上對空白很敏感;如果要在方法調用中使用括號,請不要在方法名稱和左括號之間放置任何空格。 –

+0

你可以在'show_comments.js.erb' - >'<%data = @image_comments? j render(partial:'comments/image_comment',collection:@image_comments):「Not Found」%> $('div')。html(<%= data%>);' – 7urkm3n

回答

0

做你的條件_image_comments.html.erb文件是這樣的:

<% if @image_comments %> 
    ==> your current partial here 
<% else %> 
    <strong>Not Found</strong> 
<% end %> 
+0

這似乎並不奏效。如果我正在使用一個集合,並且如果集合是空的,那麼由於集合中沒有成員,所以不會對rails進行任何操作。 – user4584963

+0

如果你在集合中有任何東西,你將渲染你的部分(如前所述)。如果你沒有,你會渲染「未找到」。所以,你只需要調用'<%= escape_javascript(渲染部分:'comments/image_comments')%>' –

+0

這[部分]的最底部(http://guides.rubyonrails.org/layouts_and_rendering.html#渲染集合)說,如果你有一個空的集合渲染將返回零,所以這就是爲什麼我認爲我可以使用類似上面的答案。 – user4584963

0

它很容易只使用一方的做法。

<%if [email protected]_comments.empty?%> 
    $('div').html("<%= escape_javascript (render partial: 'comments/image_comment', collection: @image_comments) %>"); 
<%else%> 
    $('div').html("<strong>Not Found</strong>") %>"); 
<%end%> 

OR

$('div').html("<%= [email protected]_comments.empty? ? escape_javascript(render partial: 'comments/image_comment', collection: @image_comments) : '<strong>Not Found</strong>' %>");