2013-03-31 87 views
0

我有一個bookmark型號,具有:url屬性。我需要將它以正確的格式保存在數據庫中:使用http://https://前綴。保存到數據庫之前編輯數據

所以,在bookmarks_controller我做了一個before_filtercreate行動:

class BookmarksController < ApplicationController 
    before_filter :standardise_urls, only: :create 
. 
. 
. 
def create 
    @bookmark = current_user.bookmarks.build(params[:bookmark]) 
    if @bookmark.save 
     flash[:success] = "Bookmark created!" 
     redirect_to root_url 
    else 
     render 'static_pages/home' 
    end 
    end 
. 
. 
. 
private 

    def standardise_urls 
    if params[:bookmark][:url] != /https?:\/\/[a-zA-Z0-9\-\.]+\.[a-z]+/ 
     params[:bookmark][:url] = "http://#{params[:bookmark][:url]}" 
    end 
    end 
end 

但它不工作。我希望它添加http://前綴鏈接,沒有它,當用戶添加它們。但它會繼續向所有創建的鏈接添加前綴。

我認爲錯誤在重複params[:bookmark][:url],但我不明白如何解決它。

此外,在控制器中添加此過濾器是否正確?也許它必須在模型級別?或者,當生成視圖時,最好在動態添加前綴,所以我必須把它放在那裏?

非常感謝!

回答

1

我認爲你的邏輯問題是你正在測試正則表達式上的平等,而不是做一個實際的正則表達式測試(=〜或!〜)。

我會推薦在您的書籤模型中執行此操作。測試起來會更容易,並且模型的責任似乎是知道一個有效的URL是什麼。您可以通過覆蓋由Active Record自動生成的url setter方法來執行此操作:

class Bookmark < ActiveRecord::Base 
    def url=(link) 
    unless link =~ /https?:\/\/[a-zA-Z0-9\-\.]+\.[a-z]+/ 
     link = "http://#{link}" 
    end 

    super 
    end 
end 
相關問題