2012-09-20 26 views
0

所以,我在這個新的,並試圖通過右跳學習導軌 - 註冊代碼的有效性檢查

我在我的Rails應用程序略顯奇怪的登錄,它是這樣工作的:

  • 管理員生成一個代碼,並指定一個上限
  • 用戶通過輸入該代碼登錄和一些細節,其被保存

型號:

class Code < ActiveRecord::Base 
    has_many :users, dependent: :destroy 
    attr_accessible :code, :maxusers 
end 

class User < ActiveRecord::Base 
    belongs_to :code 
    attr_accessible :name, :email, :code_id 
end 

用戶控制器:

class UsersController < ApplicationController 
    def create 
    @user = User.new(params[:user]) 
    if @user.save 
     redirect_to "/welcome" 
    end 
    end 
end 

因此,例如代碼爲123456與5

限制前5個用戶可以使用其姓名,電子郵件報名和123456

所以問題是:如何在保存之前檢查代碼是否有效?它必須存在並且分配的用戶少於5個。

看起來很簡單,但我無法弄清楚語法,我正在控制器中使用before_filter,或者保存在模型中之前,但我卡住了。

回答

3

before_filter是一個壞主意:模型不得不打擾他們的完整性,而不是控制器。

你可以嘗試

# in your respective model 

validate :at_least_five_codes 

def at_least_five_codes 
    errors.add(:base, 'Try another code') unless User.where(code: code).count < 5 
end 

,並且如果使用5次目前的代碼,你將無法保存您的模型。

+0

謝謝,我喜歡這樣,我會試試看,並讓你知道。這不會檢查代碼表中是否首先存在代碼,但是,我可以同時從用戶模型中檢查該代碼;像'如果定義? Code.find_by_code(:code)'或者什麼? – Jamie

+1

@Jamie是的,你可以通過'exists?'來實現:'如果Code.exists?(代碼:'12345')'。 http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-exists-3F – jdoe

+0

謝謝,它的工作完美。 – Jamie