Rails,AJAX:根据之前点击的链接渲染新的link_to

时间:2012-05-13 06:39:41

标签: javascript ruby-on-rails ajax ruby-on-rails-3 jquery

所以我只是想做一些简单的事情,但我似乎无法在我的书中找到任何解决方案或轻松搜索它。

<div id="subscribe">
<% if session[:read_random]
    unless is_subscribed?(session[:read_random].last)%>
            <%= link_to 'Subscribe', subscriptions_path(feed_id: session[:read_random].last), method: :post, remote: :true %>

    <% else %>
        <%= link_to 'Unsubscribe', subscriptions_path(feed_id: session[:read_random].last), method: :delete, remote: :true %>

<%  end
   end %>
</div>

我的create.js.erb是:

if is_subscribed?(session[:read].last)
    $('#subscribe').html("Unsubscribe");
else
    $('#subscribe').html("Subscribe");
end

所以我知道这段代码显然是错误的,请告诉我这里我做错了什么,我想给用户选择订阅,如果他不是,反之亦然,如果他订阅了。

我是否需要将link_to放在jQuery语句的html部分中?唯一的问题是,我会尝试这个看看它是否有效,我甚至没有从ajax调用中获取任何更新的文本。服务器说它已经呈现了subscriptions / create.js.erb并且数据库正在适当更新

2 个答案:

答案 0 :(得分:0)

听起来控制器存在问题。也许我们可以看到控制器...如果您使用Firebug的webkit工具,您是否收到任何错误?

你的javascript错误,因为它混合了ruby和javascript:

<% if is_subscribed?(session[:read].last) %>
    $('#subscribe').html("Unsubscribe");
<% else %>
    $('#subscribe').html("Subscribe");
<% end %>

您的is_subscribed方法在模型中会更好,最好查询模型属性而不是使用会话。这只是一个建议。我认为is_subscribed?是在帮助器中定义的吗?

抱歉,我此时无法提供更多帮助

答案 1 :(得分:0)

解决方案:在views / subscriptions / create.js.erb和destroy.js.erb

$('#subscribe').html("<%=j link_to 'Unsubscribe', subscriptions_path(feed_id: session[:read_random].last), method: :delete, remote: :true %>");

改变毁灭,你就拥有它!