2016-12-09 5 views
0

私は単純なRoRアプリケーションを作成しようとしています。私はユーザーカテゴリの列挙型に問題を抱えています。列挙型フィールドをレールで更新可能にするにはどうすればいいですか?

class User < ApplicationRecord 
    before_save :name_to_sentence_case 

    extend Enumerize 
    enumerize :category, in: [:admin, :staff, :customer] 

    VALID_NAME_REGEX = /\A[a-z]+\z/i 
    VALID_PHONE_REGEX = /\A[0-9]+\z/ 

    validates :first_name, presence: true, length: {maximum: 20}, format: {with: VALID_NAME_REGEX} 
    validates :last_name, presence: true, length: {maximum: 30}, format: {with: VALID_NAME_REGEX} 
    validates :category, presence: true 
    validates :password, presence: true, length: {minimum: 6} 
    validates :phone, presence: true, length: {maximum: 15}, uniqueness: true, format: {with: VALID_PHONE_REGEX} 

    has_secure_password 

    def name_to_sentence_case 
    self.first_name = first_name.humanize 
    self.last_name = last_name.humanize 
    end 
end 

私は指定されたカテゴリに基づいてレールコンソールからユーザーと設定カテゴリを作成することができ、システムは、他のカテゴリを持つユーザーを作成することはできません。しかし、正しいカテゴリがあっても、既存のユーザーのカテゴリを更新することはできません。

+0

更新データは正確に何を送信していますか?それは文字列かその配列内の数字ですか? –

+0

@RockwellRiceこれは文字列です。 '文字列'または '文字列'。これは、ユーザーを作成するためではなく、更新するためではない –

+0

私はあなたがこのために必要な数字だと思っています。少なくとも、それは列挙型の列挙型で作業するときに常に使用するものです。フィールドはデータベースの整数フィールドですか? –

答えて

0

より良い方法は、ハッシュを作成することです。したがって、数値を更新するだけです。あなただけのストア値データベース(0,1または2)での数値例

CATEGORY = { 
    0 => 'admin', 
    1 => 'staff', 
    2 => 'customer' 
} 

については 、あなたはそれがあなたのハッシュから誰であるか知っているだろう。

0

レールにはenumヘルパーが組み込まれています。 Documentationによると、あなたは、次の方法でそれを使用することができます。

モデルに:あなたは文字列型のフィールド

を持つようにしたい場合は

enum category: [:admin, :staff, :customer] 

あなたcategoryフィールドは、整数型や

enum category: { admin: :admin, staff: :staff, customer: :customer } 

する必要があります

より、userを非常に簡単に更新できます。

の回答については詳しく説明し10
@user.admin! 
0

、あなたはすなわち、文字列として列挙オプションでsource code on github

@user.update(phone: "123-234-1234", category: 'admin') 

またはカテゴリ

@user.update(phone: "123-234-1234", category: :admin) 

参照線21、22をパラメータを渡すことができるようになります