0

だから、私はこれが初めてで、すぐに飛び込んで学ぼうとしています.

次のように動作する私のレールアプリに少し奇妙なログインがあります:

  • 管理者がコードを生成し、上限を指定します
  • ユーザーは、このコードと保存されているいくつかの詳細を入力してログインします

モデル:

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 に答える