Rails,AJAX:根据以前单击的链接呈现新的link_to

Rails, AJAX: Render new link_to depending on previously clicked link

本文关键字:链接 link to 单击 AJAX Rails      更新时间:2023-09-26

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

<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 调用中获得任何更新的文本。服务器说它已经呈现了订阅/创建.js.erb,数据库正在适当更新

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

你的javascript

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

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

您的is_subscribed方法最好放在模型中,并且最好查询模型属性而不是使用会话。然而,这只是一个建议。我猜is_subscribed?是否在帮助程序中定义?

对不起,我现在帮不上更多忙

解决方案:在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 %>");

改变销毁,你有它!