2017-01-18 3 views
0

私は特定の質問があります。Grails - どのように他のコントローラからコントローラにパラメータを保存する

私はgrails上で初心者です。このシナリオでいくつかのテストアプリを書こうとしています。

私は2つのドメインクラス

の1-カー 2 - 登録を持っている私は、リストからいくつかの車を選択するブランド、モデルなどとユーザとのいくつかの車を追加して、車のボタンを借りクリックします

。ユーザーが自動車のボタンをクリックすると、登録/作成ページが開きます。車を取得したい:ユーザーの選択した車のIDとユーザーが自分の名前のような追加の情報を入力し、ユーザーが登録/リスト私は車との登録を参照する必要があります:IDとあなたの名前のエントリ

私は車のリストを持って、このフィールドはここに私の車のモデルです。

package rentme 

class Car { 

    String brand 
    String model 
    String fuelType 
    BigDecimal pricePerDay 
    String busy 

    static constraints = { 
     brand(inList:["AUDI", "BMW", "MERCEDES", "NISSAN", "HONDA", "FORD"]) 
     model() 
     fuelType(inList:["FUEL", "DIESEL", "AUTOGAS"]) 
     pricePerDay(min:0.0, max:1000.0) 
     busy(inList:["YES", "NO"]) 

    } 
} 

と私は登録クラスを持って、

package rentme 

class Registration { 

    String yourName 



    static constraints = { 
     yourName() 
    } 
} 

だから私がやったこと、

私はグラムで車/ index.gspこのリンクを追加:各;

<g:each in="${carList}" var="car"> 
        <p>${car.id} </p> 
        <g:link action="create" controller="registration" params="${[car: car, carId : car.id ]}"> 
         Rent Car 
        </g:link> 

       </g:each> 

とそのような変更された登録コントローラ。

def index(Integer max) { 
     params.max = Math.min(max ?: 10, 100) 
     respond Car.list(params), model:[carCount: Car.count()] 
    } 

ここで何が起こったのですか。私がボタンをクリックするとレンダリングボタンページがリダイレクトされます。ここ

は私の登録/ create.gsp

<g:form action="save"> 
       <div><p>Car ID : ${car.id} </p></div> 
       <fieldset class="form"> 
        <f:all bean="registration"/> 
       </fieldset> 
       <fieldset class="buttons"> 
        <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> 
       </fieldset> 
      </g:form> 

であり、あなたの名前のフィールドを記入し、それが働いているようなので、ボタンのすべてがオーケーで保存しますが、

を:)ないときに私がチェックしたときに理由私のdb私は選択された車のIDが表示されません。

mysql> SELECT * FROM registration; 
+----+---------+--------------+ 
| id | version | your_name | 
+----+---------+--------------+ 
| 12 |  0 | Cihan Zengin | 
| 13 |  0 | Cihan  | 
| 14 |  0 | ndlkdkldnkl | 
+----+---------+--------------+ 

しかし、登録/インデックスまたは登録/表示にクリックすると、あなたの名前の価値がありますが、私はそこに車を見たいと思っています。

どうすればよいですか?誰かが私には分かりません。私は理解できず、インターネットのようなところには何も見つからないからです。

+0

わかりませんが、単に「登録」クラスに車のIDを追加すると、そのトリックを行う可能性があります。現在、 'Registration'クラスには名前だけが含まれていますので、それはあなたが得るものです。 –

+0

ちょうどフィールドのように追加しますか?その時、ユーザーは登録時に再び車のIDを選択する必要があります/私はこれをやりたいとは思わない、私は登録をしたい/登録クラスを保存した後に私は車のクラスから渡した車のIDを保存します。 – user3348410

+0

登録が自動車に属しているかどうか、または自動車が登録に属しているかどうかを判断する必要があります。ここでは車AがBobに登録されます。その場合、登録は自動車に属すると言うことができます。したがって、その事実を示すためにモデルに注釈が必要となり、コントローラとビューを調整してください。 hasOneとbelongsToに関するGrails/Gormを読んでください。 – railsdog

答えて

0

登録ごとに1台の車と1人の人しかいないとしましょう。

まず、登録クラス:

package rentme 

class Registration { 

    String yourName 
    Car rentedCar 

    static constraints = { 
     yourName() 
    } 
} 

あなたが見ることができるように、私が追加した車の中、すべての登録オブジェクトのため、車のオブジェクトが存在します。登録テーブルのデータベースには、新しい列「CAR_ID」が自動的に追加されます。

次は、車/インデックス用です。各GSP:

<g:each in="${carList}" var="car"> 
    <p>${car.id} </p> 
    <g:link action="create" controller="registration" params="${[carId : car.id ]}"> 
     Rent Car 
    </g:link> 

</g:each> 

action="create"controller="registration"registrationController方法create()手段が呼び出されると、見つからないか、見つからない場合、登録/ create.gspがレンダリングされます。 registrationControllerでは、私はあなたのインデックスメソッドがのためだかわからないんだけど、ちょうどこれらを追加します。

def create() { 
    def selectedCar = Car.get(params.carId) 

    [car: selectedCar] 
} 

def save() { 
    def selectedCar = Car.get(params.carId) 

    def registration = new Registration(
     yourName: params.yourName, 
     car: selectedCar 
    ).save() 
} 

その後、登録/ create.gspに:

<g:form action="save"> 
    <div><p>Car ID : ${car.id} </p></div> 
    <fieldset class="form"> 
     <f:all bean="registration"/> 
    </fieldset> 
    <fieldset class="buttons"> 
     <input type="hidden" name="carId" id="carId" value="${car?.id}"/> 
     <input type="text" name="yourName" required> 
     <g:submitButton name="create" class="save" value="${message(code: 'default.button.create.label', default: 'Create')}" /> 
    </fieldset> 
</g:form> 

create()メソッドは、のparamsを取得しますcar/index.gspのcarIdを使ってCarオブジェクトを取得し、登録/ create.gspにレンダリングします

registration/create.gspのhiddenフィールドは、car idがコントローラに渡されることを確認しますフォームが提出されます。したがって、submitButtonをクリックすると、Registration Controllerのsave()メソッドが呼び出され、取得したCarオブジェクトを含むRegistrationオブジェクトが保存されます。

私たちがここで行ったことには多くの悪い習慣がありますが、うまくいくはずです。これがまだ明らかでないかどうか私に教えてください:)

+0

男に魚を与え、彼は一晩中食べ、男に魚の釣りを教え、生涯食べる。 – railsdog

+0

私は他人についてはわかりませんが、私が何も知らない時には、コードが実際に他の人が指す参照を見るよりも、より速く、より速く役立つことを示しています。あなたが理解している観点から何かを理解し、次に参照を見ていくことは本当に役立ちます。 – Jay

+2

そこには真実がありますが、単一の、時には狭い質問に対する答えよりも広い範囲の参照を提供する利用可能なリソースも多数あります。 "grails generate-controller"や "grails generate-views"や "grails generate-all"で作成されたものを見ると、設定に対する慣例上のgrailsのデフォルトの見方が表示されます。それからあなたはそこから広がります。 – railsdog

関連する問題