2013-02-25 48 views
4

我正在創建一個Web應用程序,以在rails上學習Ruby。該應用程序允許用戶登錄並在畫布上繪製。我希望用戶能夠通過特定於用戶圖片編號的唯一生成的網址來共享該傑作。藝術品的創建者應該也可以選擇密碼保護URL。我不需要可以在Facebook或LinkedIn上分享的URL,推特或類似的東西。只需要一個普通的URL,可以通過電子郵件發送或短信等。如何處理在Rails應用程序中共享唯一網址?

我應該用什麼方法來實現呢?是否有任何寶石可以輕鬆地實現此功能?任何設計建議和智慧將不勝感激。謝謝!

回答

3

你可以在你的傑作模型上有一個名爲public的布爾值。如果圖片是公開的,那麼任何人都可以訪問它。但是,如果它不是公開的,那麼使用您的返回URL將不會執行任何操作。

您的公開網址可以通過哈希創建。我通常喜歡在創建模型時創建哈希令牌。

rails g migration add_hash_token_to_masterpieces hash_token

在你的模型,你可以使用before_create方法來調用taht將隨機十六進制更新hash_token的私有方法。

before_create :generate_hash_token 

private 

    def generate_hash_token 
    begin 
     self.hash_token = SecureRandom.hex 
    end while self.class.exists?(hash_token: hash_token) 
    end 
在你的路由文件

然後,你可以做這樣的事情

match "/public/:hash_token" => "masterpieces#public_masterpiece", as: "public"

然後在你的控制器,你可以有你的散列令牌的查找方法,並有顯示相應的視圖圖像爲公衆用戶。注意_and_public只發現那些公開的。即使哈希是有效的,如果傑作不公開,它也不會返回記錄。

def public_masterpiece 
    @masterpiece = Masterpiece.find_by_hash_token_and_public(params[:hash_token], true) 
    ... 
end 

然後在你的傑作的觀點,你可以有一個叫public_masterpiece.html.erb文件,該文件是一個特定的渲染誰還沒有授權的帳戶,但仍然可以查看圖片的用戶。如果您正在使用像康康那樣的寶石進行授權,您需要確保允許public_masterpiece動作。

+0

謝謝。那麼究竟哪個網址可以共享?哪裏可以保存所有唯一的網址? – user2028025 2013-02-25 04:45:50

+0

URL是通過模型中的哈希令牌動態生成的。該URL是HTTP:// site/public/hashtoken – kobaltz 2013-02-25 04:48:22

相關問題