0
コントローラの作成および更新メソッドが期待どおりに機能していません。私の属性の1つはクーポンコードです。私は、クーポンコードになりたい:レールのRegex検証が機能しません:空白値を持つ一意の英数字の値が許可されます
- ユニークしかし、空白またはnilの大文字、数字にコードを制限する
- 使用正規表現を値と現在
を強調できるように、私はいくつかを持っています問題。私のモデルはClassPriceと呼ばれ、2つの属性を持っています::coupon_code &:cost_in_cents。問題は、次のとおりです。
- 私は空白を使用して新しいClassPriceを作成しようとすると:COUPON_CODEは、それは、新しいアクションをリロードする私が成功したメッセージを与えるが、新しいコードは実際には保存されません。
- 既存のClassPriceを空白:coupon_codeで更新しようとすると、検証エラーが表示され、変更は保存されません。「エラー:文字、数字またはアンダースコアが大文字でしかない」ここで
私のコントローラである:
class ClassPrice < ActiveRecord::Base
has_many :class_section_prices
has_many :class_sections, through: :class_section_prices
after_initialize :init
validates :coupon_code, uniqueness: true, allow_blank: true, allow_nil: true
validates :coupon_code, format: { with: /\A[A-Z0-9_]+\z/,
message: "ERROR: only allows upppercase letters, numbers or underscores." }
def cost_in_dollars
if self.amount_in_cents == 0
"FREE"
else
"$#{amount_in_cents/100.0}0"
end
end
def virtual_price_in_dollars
amount_in_cents.to_d/100 if amount_in_cents
end
def virtual_price_in_dollars=(dollars)
self.amount_in_cents = dollars.to_d * 100 if dollars.present?
end
private
def init
self.coupon_code ||= ""
self.amount_in_cents ||= 0
end
end
そして、ここでは私のモデルである:
class Admin::ClassPricesController < ApplicationController
layout 'admin'
before_action :full_authenticate
def full_authenticate
authenticate_user!
if !current_user.is_admin?
flash[:alert] = "Access denied."
redirect_to root_url
end
end
def index
@class_prices = ClassPrice.all
end
def new
@class_price = ClassPrice.new
end
def create
if @class_price = ClassPrice.create(class_price_params)
redirect_to new_admin_class_price_path(@class_price), notice: 'New class price created.'
else
render action: "new"
end
end
def edit
@class_price = ClassPrice.find(params[:id])
end
def update
@class_price = ClassPrice.find(params[:id])
if @class_price.update_attributes(class_price_params)
redirect_to edit_admin_class_price_path(@class_price), notice: 'Class Price was successfully updated.'
else
render action: "edit"
end
end
def destroy
@class_price = ClassPrice.find(params[:id])
if @class_price != nil
@class_price.destroy
redirect_to admin_class_prices_path(@class_section), notice: 'Class Price was deleted.'
else
redirect_to admin_class_prices_path(@class_section), notice: 'Class Price not found.'
end
end
private
def class_price_params
params.require(:class_price).permit(:class_price_id, :amount_in_cents, :coupon_code, :virtual_price_in_dollars)
end
end
問題がある任意のアイデア?