Rails:Single button boolean表单-决定是发布到:create还是:delete



我有一个应用程序,允许用户在不同的网站上跟踪歌曲。一个用户拥有_many:tracables和has_many:songs through:trackables。

:trackables表具有song_id、user_id和网站

在我的索引页面上,我呈现了所有@歌曲。每首歌有3个图标,每个图标都是一个ajax表单,点击后,会将其发布到trackables_controller,并根据点击的图标将其发布为"spotify"、"rdio"或"songza"。

如果用户以前从未点击过图标,则表单应张贴到:create。如果已经单击了图标,但再次单击,则表单应张贴到:delete。

我希望这是有道理的。我想我可以发布创建,检查是否存在相同的记录(如果存在,则删除)。我正在想办法解决这个问题。

我认为TrackablesController中应该有三种形式都指向的toggle动作(但有不同的song_id和网站参数)。创建/删除可跟踪的逻辑应该放在可跟踪模型中,如下所示:

class Trackable < ActiveRecord::Base
  ...
  def self.toggle(user, song, website)
    existing_trackable = where(user_id: user.id, song_id: song.id, website: website)
    if existing_trackable.present?
      existing_trackable.destroy_all
    else
      create(user_id: user.id, song_id: song.id, website: website)
    end
  end
end

它被称为这样:

class TrackableControllers < ApplicationController
  def toggle
    return render json: false unless user_signed_in?
    song = Song.find(params[:song_id])
    return render json: false unless song.present?
    Trackable.toggle(current_user, song, params[:website])
    render json: true
  end
end

是的,它不是CRUD,但它仍然是REST:有一个资源(可跟踪)和一个操作(切换)。

相关内容

  • 没有找到相关文章

最新更新