【问题标题】:Rails acts_as_votable using AJAX to stop page reloadsRails act_as_votable 使用 AJAX 停止页面重新加载
【发布时间】:2019-08-13 20:30:51
【问题描述】:

我正在尝试在不重新加载页面的情况下使用acts_as_votable 进行投票,但我不确定如何更改路线以使其正常工作

控制器

def upvote
    @video = Video.find(params[:id])
    @ip = request.remote_ip
    # Ipaddresstracker.delete_all
    if Ipaddresstracker.find_by(ipaddress: @ip)

    else
       Ipaddresstracker.create(:ipaddress => @ip, :upvoted => true, :upvotedcount => 1)
       @video.vote_by voter: User.first, :duplicate => true
    end
  # redirect_to :back
    respond_to do |format|
    format.html { redirect_to :back }
    format.js { render layout: false }
  end
end

查看

<%= link_to like_video_path(x), method: :get, remote: true, class: "btn btn-default btn-sm" do %>

路线

resources :videos do
  member do
    put "like", to: "videos#upvote"
    put "dislike", to: "videos#downvote"
  end
end

错误

ActionController::RoutingError(没有路由匹配 [GET] "/videos/53/like"):

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    路由需要put 请求。将:method 选项更改为:put

    <%= link_to like_video_path(x), method: :put, remote: true, class: "btn btn-default btn-sm" do %>
    

    【讨论】:

    • 这给出了错误 ActionView::MissingTemplate (Missing template videos/upvote, application/upvote with {:locale=>[:en], :formats=>[:js, :html], : variables=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]} 我正在关注这个stackoverflow.com/questions/31251246/…,但它没有指定如何处理路由
    • 您需要为该操作添加一个视图,例如views/views/upvote.js(可能是.js.erb,以便您可以使用您的rails 变量)和一些javascript 代码来更新页面。
    • 你提供的链接上有一些js视图的例子,玩一下那个代码,我不知道你的实际视图是什么。
    【解决方案2】:

    其实,如果你有 Jquery,你可以通过 Jquery 来解决这个问题。 如果没有,请尝试更改此format.js { render layout: false }。您无需渲染任何内容,因此您可以在 format.js 块中设置 render :nothing =&gt; true

    【讨论】:

    • 按照@arieljuod 之前告诉你的去做。它解决了这个渲染的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2013-09-29
    相关资源
    最近更新 更多