2015-05-28 97 views
0

我們可以調用一個方法「validate_uniqueness」呼叫在validate_uniqueness的方法在Rails的

我有一個名爲「PROFILE_URL」,這應該是所有用戶的唯一列。我正在檢查它的唯一性使用

validates_uniqueness_of :profile_url, message: "has already been taken" 

我希望這個重定向到一個方法,如果這個驗證命中發生。是否有可能在軌道上的紅寶石分配一個方法與此驗證唯一性線。

+0

重定向到一個方法?哪裏?在控制器?在模型中? – Surya

+0

in model .............. –

+1

不可以。如果驗證失敗,則無法重定向到方法。但是,您可以使用'after_validation'回調並檢查對象是否有錯誤。 – Surya

回答

0
validates_uniqueness_of :profile_url, message: "has already been taken", if: :method_name? 

只有當方法返回true時,此驗證纔會觸發。

+0

Huuh。你看錯了像我這樣的問題..:P OP想要相反.. –

+0

你可以檢查控制器內部,如果錯誤散列包含鍵「profile_url」,然後重定向到你想要的方法。 –

2

您可能需要使用自定義驗證這樣的:

class User 
    validate :verify_unique_profile_url 

    def verify_unique_profile_url 
    if User.exists? profile_url: profile_url 
     errors.add :profile_url, 'has already been taken' 
    end 
    end 
end 

更多信息,可以發現here

+0

是的。自定義驗證是這裏的好建議。 –

+0

如果現有用戶嘗試編輯其設置/ proile,則您的條件將不起作用。它應該是'User.exists?(profile_url:profile_url)&& self.new_record?' – Surya

+0

@Surya當用戶更新'profile_url'時,該驗證應該可能運行。在這種情況下,你的建議將'跳過'驗證。你可能的意思是應該添加一個檢查來查看profile_url是否存在於你自己的用戶記錄中。 – newmediafreak