0

这可能有一个更好的标题,但我不知道技术术语是什么

无论如何,我正在执行一个将链接附加到 div 的 ajax 调用。该链接包含 erb 代码,例如

#{post.comments.count}

$('#comments_<%= @post.id %>').append("<%= escape_javascript (link_to 'view all #{post.comments.count} comments', post_comments_path(@post), remote: true, class: 'more-comments', id: 'more_comments_#{post.id}', data: {post_id: @post.id, type: 'html', value: '#{post.comments.count}' }) %>"); }`

链接最终看起来像这样:

<br/><br>
view all #{post.comments.count} comments
<br>
<br>

这是检查链接时的样子:

<a class="more-comments" id="more_comments_#{post.id}" data-post-id="4" data-type="html" data-value="#{post.comments.count}" data-remote="true" href="/posts/4/comments">view all #{post.comments.count} comments</a>

当我尝试<%= %>在代码中使用时,我最终得到 500 个错误。使用其他 AJAX 链接时,<%= %>我不会被抛出这些 500 错误。

例如:

这有效:

$('#more_comments_<%= @post.id %>').html("view all <%= @post.comments.count %> comments");

这不会:

$('#comments_<%= @post.id %>').append("<%= escape_javascript (link_to 'view all <%= @post.comments.count %> comments', post_comments_path(@post), remote: true, class: 'more-comments', id: 'more_comments_<%= @post.id %>', data: {post_id: @post.id, type: 'html', value: <%= @post.comments.count %> }) %>");

这会引发此错误:

POST http://localhost:3000/posts/4/comments 500 (Internal Server Error)

我尝试通过将链接与 JS 持有的变量“拼接”在一起来规避这一点:

$('#comments_' + Append.id).append("<%= link_to 'view all " + Append.comment_count + " comments', post_comments_path(" + Append.id + "), remote: true, class: 'more-comments', id: 'more_comments_" + Append.id + "', data: {post_id: " + Append.id + ", type: 'html', value: " + Append.comment_count + " } %>");

而且我仍然收到 500 错误。

评论控制器看起来像这样,

def index
        @post = Post.find(params[:post_id])
        @comments = @post.comments.all.order("created_at ASC")
        respond_to do |format|
            format.html { render layout: !request.xhr? }
            format.js
        end 
    end
end

我在 stackoverflow 上找不到这个确切的问题,我可能只是没有用谷歌搜索(TIL 谷歌搜索是一个词)正确的关键词。对于那些做到这一点的人来说,很多电子爱

4

1 回答 1

1

似乎您正在尝试<%= %>在应该使用标准 Ruby 字符串插值 () 的地方使用 ERB 标记 ( #{ })。

ERB 标签只能在某些地方使用,例如.erb文件。

此外,ERB 标签不能嵌套。所以在你的例子中,

$('#comments_<%= @post.id %>').append("<%= escape_javascript (link_to 'view all <%= @post.comments.count %> comments', post_comments_path(@post), remote: true, class: 'more-comments', id: 'more_comments_<%= @post.id %>', data: {post_id: @post.id, type: 'html', value: <%= @post.comments.count %> }) %>");

问题是 escape_javascript 方法中的 ERB 标签,应该用标准的 Ruby 字符串插值替换。

仅供参考,除非您显示实际错误,否则说您有 500 错误是没有用的。由于 500 是“通用”错误,它可能是由几乎无限的情况引起的。

于 2016-03-05T12:17:30.167 回答