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 或在模型中保存之前玩,但我被卡住了。

4

1 回答 1

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 次,您将无法保存模型。

于 2012-09-20T17:14:46.187 回答