js.erb错误地传递参数

时间:2015-07-19 11:53:38

标签: javascript ruby-on-rails ruby erb

我有这个链接在“推文”控制器

中触发了我的“show_replies”方法
  <% @replies_link = link_to "show replies", tweets_show_replies_path(:parent => tweet, active: false ), method: :post, remote: true, class: "show-replies" %>

你可以看到它有两个参数有效,它被渲染为

<a class="show-replies" data-remote="true" rel="nofollow" data-method="post" href="/tweets/show_replies?active=false&parent=1">show replies</a>

show_replies 方法如下所示

def show_replies

    @active_param = params[:active]
    @parent = Tweet.find(params[:parent])
    @tweet = Tweet.new

    if @active_param === true
        params[:active] = false
    else
        params[:active] = true
    end

    respond_to do |format|
        format.html {render :nothing => true}
        format.js
    end

end

这是我的 show_replies.js.erb

var parent_tweet = $('#tweet-<%= @parent.id %>');
$(parent_tweet).find('.replies').append(' <%=j render "tweets/replies" %> ');
$(parent_tweet).find('.show-replies').attr('href', "<%=j tweets_show_replies_path(:parent => @parent, active: params[:active]) %>")

但在使用我的show_replies.js.erb更改 href 属性后,链接中的参数格式错误就是这个

<a class="show-replies active" data-remote="true" rel="nofollow" data-method="post" href="/tweets/show_replies?active=true&amp;parent=1">show replies</a>

你知道为什么js脚本添加了“amp;”我的属性网址?有办法解决它吗?因为当我点击链接第二个tyme时,我的“show_replies”方法无法正确读取参数。

1 个答案:

答案 0 :(得分:0)

在Rails中,不安全的值会自动转义。 &被视为不安全的值,因此会转义为&amp;

但我认为生成的链接不应该被转义,应该按照我的意思使用。所以我认为你应该在这里使用原始输出:

 <%== tweets_show_replies_path(:parent => @parent, active: params[:active]) %>

或:

 <%= raw tweets_show_replies_path(:parent => @parent, active: params[:active]) %>