【问题标题】:Rails like button not updating with Ajax (make_flaggable gem)Rails 之类的按钮不使用 Ajax 更新(make_flaggable gem)
【发布时间】:2013-09-01 18:49:29
【问题描述】:

我正在使用 make_flaggable gem 创建一个名为:fav 的“赞”按钮。我的代码可以正常工作,但我似乎无法将其转换为 Ajax,因此它会动态更新。问题可能出在我的link_to 操作或redirect_to 中,但我不知道将其更改为什么。任何帮助表示赞赏!

events_controller.rb

def fav
  @event = Event.find(params[:id])
  current_user.toggle_flag(@event, :fav) #toggles the fav

  respond_to do |format|
    format.js
    format.html { redirect_to :back }
  end
end

helpers/events_helper.rb

def toggle_fav(event, user)
  link_to
    user.flagged?(event, :fav) ? #if the user has already flagged(favoured) the event
    content_tag(:span, " ", :class => "glyphicon glyphicon-heart") : #show a full heart icon
    content_tag(:span, " ", :class => "glyphicon glyphicon-heart-empty"), #show an empty heart icon
    fav_event_path(event), #this updates the database and I think is the cause of the problem
    :remote => true
end

views/events/fav.js.erb

$('.fav-heart').html("<%= escape_javascript toggle_fav(event, current_user) %>");

views/events/index.html.erb(与收藏相关的内容)

<li class="fav-heart">
  <%= toggle_fav(event, current_user) %>
</li>

【问题讨论】:

    标签: ruby-on-rails ajax


    【解决方案1】:

    据我所知,您的 link_to 代码可能有问题?是个 ?像这样分布在 3 行中的操作,还是您只是为了在 SO 上的可见性而缩短它?

    这应该是有效的:

    link_to user.flagged?(event, :fav) ? content_tag(:span, " ", :class => "glyphicon glyphicon-heart") : content_tag(:span, " ", :class => "glyphicon glyphicon-heart-empty"), fav_event_path(event), :remote => true
    

    但是如果你要分手?跨多行操作我认为它不会起作用。无论如何,这是不好的形式,多行 if/then 应该使用 if 语句以提高可读性。

    【讨论】:

    • 也在一条线上?你可能会包装的版本?为了便于阅读,括号中的语句,不确定 link_to 方法是否变得混乱。
    • 为了便于阅读,我在此处将其拆分,但这是我实际助手中的一行。将其更改为多行 if 语句,但结果没有任何不同。
    • :-/ 嗯...我和你在一条类似的船上。我提交了this question 试图获得一个javascript 响应来更新按钮元素上的类。一切都在完美的服务器端运行,但浏览器中没有任何反应。当你点击按钮时,你可以从你的网络服务器发布日志吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2011-12-06
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多