2016-10-30 6 views
0

redux-ormを使用する場合、モデルインスタンスの作成時に関連するデータをどのように追加しますか?例えばredux-ormのリレーションと一緒にモデルの新しいインスタンスを作成するにはどうすればいいですか?

次の二つのモデル与えられた:

// User 
import {fk, many, Model} from 'redux-orm'; 
export default class User extends Model { 
    static modelName = 'User'; 

    static fields = { 
     pets: many('Pet', 'pets'), 
    }; 
} 

// Pet 
import {fk, many, Model} from 'redux-orm'; 

export default class Pet extends Model { 
    static modelName = 'Pet'; 

    static fields = { 
     user: fk('User', 'pets'), 
    }; 
} 

私がペットモデルに減速を作成するには、次のようになります。

 case 'PET/CREATE': 
      const newPet = Pet.create(action.payload); 
      newPet.user.add(action.parentId); // parentId is the user id 
      break; 

このnewPet.userは未定義であるとしてしかし、エラーになります。私も、私も、ID再ルックアップしようとしてきた

 case 'PET/CREATE': 
      const newPet = Pet.create(action.payload).withRefs; 
      newPet.user.add(action.parentId); 
      break; 

withRefsを試してみました。私にできることがわかっ

 case 'PET/CREATE': 
      const newPet = Pet.create(action.payload); 
      // console.log(newPet.id); // correctly outputs id 
      Pet.withId(newPet.id).user.add(action.parentId); 
      break; 

EDIT

const newPet = Pet.create({ ...action.payload, user: action.parentId }); 

しかし、肯定的ではないことが正しいアプローチであり、そのアクチュア正しくリンクされているので、今のところ質問を開いておいてください。

答えて

1

「手動で」関連フィールドの関連ID値を渡すことは、これを行う1つの方法です。もう一つは、最初のモデルを作成することで、その後、作成中または後に第2のモデルインスタンスに最初のモデルインスタンスを渡します。

const fred = User.create({name : "Fred"}); 

// Pass during creation 
const pet = Pet.create({name : "Spot", user : fred}); 

// Or after creation 
const pet = Pet.create({name : "Spot"}); 
pet.user = fred; 

// Then ask Redux-ORM to apply queued updates and return the updated data 
return session.reduce(); 

編集

アップデート:私はReduxの上のカップルの記事を公開しました-ORMをa series on "Practical Redux"の最初の2つの部分として扱い、自分自身の経験からReduxを使って開発した技術について議論します。

+1

素晴らしいです。私は創造の後に準備ができていない関係(つまり 'const pet = Pet.create({}); typeof pet.user === 'undefined'')によって投げられたと思います。私はEloquent(laravels orm)に慣れているので、うまく働いていると見なされました。サイドノートは、あなたの提案に基づいて、redux-orm + draft/view/editモードを使用したサンプルレポと私の反応の下書き質問にコメントを追加しました。ありがとう! – Chris

関連する問題