繁体   English   中英

在Rails中使用Ajax投票

[英]Voting with Ajax in Rails

我试图允许用户使用Ajax对记录进行投票。 我使用的是表决功能插件vote_fu,在没有Ajax的情况下一切正常。 我现在正试图找出用不引人注目的JavaScript来实现异步功能的最佳方法。

我现在正在做的是有两个按钮,“上”和“下”,这样,当您单击其中一个按钮时,将根据用户是否已提交表决的请求,对widget_controller进行创建和更新操作之前的记录。 提交的参数将是record_id以及投票的值。

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

有没有标准的方法来解决这个问题? 我正在考虑只是在“ create”方法中添加一个额外的检查,以便如果它找到了user_id,votable_id对的记录,它将像“ update”一样工作,但是这看起来很笨拙并且没有完全RESTful。

谢谢,埃里克

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

1)当erb创建页面时,您可以为页面的JS脚本提供参数。 参数将是“ voting_url”,取决于应使用创建还是更新操作,它可以是投票/新投票或投票/ 123。

2)您可以使用“过程调用”,而不是休息调用。 该过程/动作将为“ change_vote”-参数“ up”为true或false。 如果需要,该操作将创建投票记录,否则将对其进行修改。

3)作为主记录创建过程的一部分,您始终可以创建vote_record。 这样,由于表决记录将始终已经存在,因此表决操作将始终是更新的。

添加

回复: 一般来说什么时候摆脱休息电话是“可以接受的”?

休息是一种设计理念。 它解决了很多问题,但并不适合所有情况。 我认为您最初的问题可以,但是最终由您决定,由谁来审查您的体系结构。 由于可以将您的应用程序“弯曲”到该函数的rest api中,因此有些人可能会告诉您这样做-从而获得了不违反Restfulness的好处。

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

由于“创建朋友关系”是有意义的,因此在其他条件相同的情况下,最好将api表示为其余的“友谊对象/创建”调用。 正是为了您的友善示例而创建了其余部分。 -旧的替代方法是每个api开发人员都必须找出一大套过程名称。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM