2

従来のデータベース スキーマ (PostgreSQL) を使用していますが、変更できません。クラスをデータベースモデルにマッピングする際に問題があります。これが私が望むものであり、私が持っているものです

-> データベース スキーマ - DataTable ユーザー- PostgreSQL

PK ID STRING (メール)、パスワード STRING

-> 私のモデル -ドメイン ユーザー

PK メール STRING、パスワード STRING

ユーザーがcreate.gsp ビューを介してユーザーの ID (電子メール) を挿入できるようにする必要があります。create.gspまたはその他の.gspを手動で変更したくありません。Grailsにビューを自動生成してもらいます。

では、他のフィールドのように主キーを表示するビューを自動生成して、最終ユーザーが挿入/表示できるようにするにはどうすればよいですか?

私のドメインには、次のようなものがあります。

class Usuario {
    String id
    String password

    static constraints = {
        id email: true
        password blank:false, nullable:false
    }

    static mapping = {
        table 'usuario'
        version false
        id column: 'id', generator: 'assigned'
    }

    String toString(){
        return id
    }
}

よろしくお願いします。私の英語でごめんなさい!

アップデート:

[次のコード] をユーザー コントローラーに挿入しようとすると、idフィールドが表示されるようになりましたが、新しいユーザーcreate.gspを作成したときのみ、 list.gspでユーザーのリストを表示するときにのみ表示されます。フィールドID (メール)を参照してください

def scaffold = Usuario 

更新 II:

私はuser1128791からのコメントに従いましたが、うまくいきました。テンプレート システムをインストールしてから、list.gspフォームsrc/templates/scaffoldingを変更して id フィールドを表示します。次のようなものです。

excludedProps = Event.allEvents.toList() << 'version' << 'id'
allowedNames = domainClass.persistentProperties*.name << 'dateCreated' << 'lastUpdated'

このため

excludedProps = Event.allEvents.toList() << 'version'
allowedNames = domainClass.persistentProperties*.name << 'dateCreated' << 'lastUpdated' << 'id'

更新 III:

さらに進んで、次の変更を行い、メールフィールドとパスワードフィールドのみで動作するようにしました。

class User {
    String email
    String password

    static transients = ['id']

    void setId(String email) {
       id = email
    }

    String getId() {
       return email
   }

   static constraints = {
       email email: true, blank:false, nullable:false
       password blank:false, nullable:false
   }
    static mapping = {
        table 'usuario'
        version false
        id generator: 'assigned', name: 'email'
        email column: 'id'
    }

    String toString(){
        return id
    }
}

私の問題と私がそれをどのように解決したかについて最大限の情報を得ることができるようにするために、それが私がマッピングしているものです:

CREATE TABLE usuario
(
   id text NOT NULL,
   "password" text,
    CONSTRAINT "PK usuario" PRIMARY KEY (id)
);
4

1 に答える 1

1

http://www.grails.org/Artifact+and+Scaffolding+Templatesから:

プロジェクトのテンプレートをカスタマイズするには、テンプレートをインストールする必要があります。

grails install-templates

これにより、さまざまなアーティファクトとスキャフォールディングテンプレートを含むsrc/templatesフォルダーがプロジェクトに作成されます。

IDの非表示フィールドではなくテキストフィールドをレンダリングするには、各*.gspテンプレートを変更する必要があります。

編集:テンプレートを調べます。Grails 2.0は、「割り当てられた」IDに対してこれを自動的に実行する必要があります。

于 2012-07-09T11:21:06.650 に答える