簡體   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