【问题标题】:Voting with Ajax in Rails在 Rails 中使用 Ajax 投票
【发布时间】:2010-10-20 02:55:44
【问题描述】:

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

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

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

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

谢谢, 埃里克

【问题讨论】:

    标签: javascript ruby-on-rails ajax voting


    【解决方案1】:

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

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

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

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

    已添加

    Re:评论什么时候放弃休息电话通常是“可接受的”?

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

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

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

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

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

    【讨论】:

    • 我在考虑只使用过程调用,但出于好奇,什么时候通常“可以接受”离开休息调用?例如,如果你的用户之间有朋友关系,你会用 FriendshipsController#create 或 UsersController#addFriend 交朋友吗?
    • 更新了回复您的评论。
    【解决方案2】:

    另一个想法是根据记录是否为新记录来更改 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      相关资源
      最近更新 更多