1

我试图让用户使用 Ajax 投票赞成/反对记录。我将 vote_fu 插件用于投票功能,没有 Ajax 一切正常。我现在正试图找出用不显眼的 javascript 实现异步功能的最佳方法。

我现在正在做的是有两个按钮,“向上”和“向下”,这样当您单击其中一个按钮时,就会向 votes_controller 和创建或更新操作发出请求,具体取决于用户是否已经提交了投票之前的那个记录。提交的参数将是 record_id 以及投票的值。

使用Ajax,我应该如何处理用户进入页面投票而之前没有在记录上投票的情况?具体来说,链接会在开始时转到 votes#create,但在第一次提交之后,链接应该切换到 votes#update。

有没有标准的方法来解决这个问题?我正在考虑在“create”方法中添加一个额外的检查,这样如果它找到 user_id、voteable_id 对的记录,它就会像“更新”一样,但这似乎有点笨拙,而且不完全是 RESTful。

谢谢,埃里克

4

2 回答 2

1

有几种常用的技术/模式:

1)当您的erb创建页面时,您可以为作为页面一部分的JS脚本提供一个参数。参数将是“voting_url”,它将是 votes/new 或 votes/123,具体取决于是否应该使用创建或更新操作。

2)您可以使用“程序调用”而不是休息调用。过程/动作将是“change_vote”——带有一个参数“up”,它可以是真或假。如果需要,该操作将创建投票记录,或者以其他方式对其进行修改。

3) 作为主记录创建过程的一部分,您可以随时创建 vote_record。这样,投票操作将始终是更新的,因为 vote_record 将始终存在。

添加

回复:评论什么时候离开休息电话通常是“可以接受的”?

休息是一种设计哲学。它解决了很多问题,但并不适合所有情况。我认为您最初的问题是可以的,但最终取决于您和审查您的架构的人。由于可以将您的应用程序“弯曲”成用于此功能的休息 api,因此有些人可能会告诉您这样做 - 从而获得不违反 Restfulness 的好处。

回复:您在评论中关于朋友关系的示例:

由于“创建朋友关系”是有意义的,因此在其他条件相同的情况下,将 api 表达为休息“友谊对象/创建”调用会更好。正是为了您的交友示例而创建了休息。-- 旧式替代方案是每个 api 开发人员必须找出一大组过程名称。

Rest 提供了一种更一致、更标准的创建名称的方法。

请注意,最好将“change_vote”过程定义为投票对象的一部分:投票/change_vote 或类似的东西。我相信对于不符合标准休息动词的休息程序的网址有一种“Rails 方式”。

于 2010-10-20T03:41:14.713 回答
0

另一个想法是根据记录是否为新记录来更改 url(可能通过帮助程序)。

就像是:

link_to_remote "Up", :url => voting_path(@vote)

module VotesHelper
  def voting_path(vote)
    if vote.new_record?
      new_voting_path
    else
      edit_voting_path(vote)
    end
  end
end
于 2010-10-20T04:21:56.367 回答