3

我构建了一个 Rails 应用程序,用户可以将音乐添加到他们的个人播放列表中。这些播放列表只有所有者才能看到。

有一个带有播放列表控制器的“我的”命名空间。在控制器内部,我有一种方法可以将歌曲添加到播放列表并删除。

def add
    @post = Post.find params[:post_id]
    @playlist = current_user.playlist
    @playlist.posts << @post
    redirect_to root_path, :flash => { :alert => "Added to playlist!"}

end

def remove
    @playlist = current_user.playlist
    @playlist.posts.delete(params[:post_id])
    redirect_to my_playlist_path, :flash => { :alert => "Removed from playlist!"}

end

我了解如何通过 API 提取所有音乐,因为它是一个 GET 请求。但是,我将如何在 iOS 应用程序和 Web 应用程序之间保持同步添加和删除播放列表中的歌曲。

4

2 回答 2

2

“同步”是一个非常复杂和涉及的主题。如果您想要真正的离线功能和真正的“同步”,您需要研究各种选项。但是简单地使用 Rails 后端作为 iOS 应用程序的数据源是非常容易的。只需点击端点来加载或操作数据,并对 iOS 应用程序 UI 进行相同的更改。

以下是一些阶段,从最简单的开始:

阶段 1(每次重新加载整个数据集)

  • UIViewController 已加载
    • GET 播放列表(返回播放列表中的歌曲数组)
      • 从响应中填充表格视图
  • 用户单击要添加的歌曲
    • 发布播放列表/歌曲
      • GET 播放列表(返回播放列表中的歌曲数组)
        • 从响应中填充表格视图
  • 用户单击要删除的歌曲
    • 删除播放列表/歌曲(返回真)
      • GET 播放列表(返回播放列表中的歌曲数组)
        • 从响应中填充表格视图

阶段 2(加载数据集一次,然后单独处理每个添加/删除)

  • UIViewController 已加载
    • GET 播放列表(返回播放列表中的歌曲数组)
      • 从响应中填充表格视图
  • 用户单击要添加的歌曲
    • POST 播放列表/歌曲(返回歌曲)
      • 将歌曲项添加到 tableview
  • 用户单击要删除的歌曲
    • 删除播放列表/歌曲(返回真)
      • 从 tableview 中删除歌曲

第 3 阶段(加载数据集一次,单独处理每个添加/删除,并进行延迟补偿)

  • UIViewController 已加载
    • GET 播放列表(返回播放列表中的歌曲数组)
      • 从响应中填充表格视图
  • 用户单击要添加的歌曲
    • 将歌曲项添加到 tableview
      • POST 播放列表/歌曲(返回歌曲)
        • 如果请求失败,则将先前添加的项目删除到 tableview
  • 用户单击要删除的歌曲
    • 从 tableview 中删除歌曲
      • 删除播放列表/歌曲(返回真)
        • 如果请求失败,则将先前删除的歌曲项添加到 tableview
于 2013-09-16T06:59:20.357 回答
0

这是 Rails 中的路由问题吗?

请参阅 Rails 路由指南

http://guides.rubyonrails.org/routing.html

resources :playlists do
  get :add, on: :member
  delete :remove, on: :member
end

或者,您可以使用createanddestroy中定义的操作来resources代替addand remove

并且您需要发送一个请求,其中包括_method参数以从您的 iOS 应用程序模拟 rails PUT/DELETE 方法。

iOS 设备可以向 Rails 应用程序发送 PUT 请求吗?

于 2013-09-16T04:26:49.557 回答