Довольно HABTM список записи - PullRequest
       22

Довольно HABTM список записи

0 голосов
/ 28 августа 2011

У меня есть таблица / модель Рецепт, Предмет и Единицы.У меня есть отношения HABTM с рецептом и элементом, и я получаю поле множественного выбора по умолчанию при добавлении / редактировании рецепта.(Я использую Bake для всего по большей части).Проблема в том, что мне нужно связать количества и единицы измерения с каждым элементом.

Образец пользовательского интерфейса, на который я надеюсь:

sample

Большой компонент этого - возможность добавлять / удалять / редактировать отдельные элементы.Я представляю себе просмотр представленных данных формы, и использование некоторого jquery и клона будет работать.Но мне было интересно, если кто-то уже создал Поведение, возможно, для этого уже?

Текущие модели (сокращены до соответствующего материала, то есть удалены пользователи / заметки / и т.д.):

class Item extends AppModel {
    var $name = 'Item';

// id : int
// name : varchar
// unit_id : int

    var $belongsTo = array(
        'Unit' => array(
            'className' => 'Unit',
            'foreignKey' => 'unit_id'
        ),
    );

    var $hasAndBelongsToMany = array(
        'Recipe' => array(
            'className' => 'Recipe',
            'joinTable' => 'recipes_items',
            'foreignKey' => 'item_id',
            'associationForeignKey' => 'recipe_id',
        )
    );
}

.

class Recipe extends AppModel {
        var $name = 'recipe';
        var $displayField = "name";

// id : int
// name : varchar


        var $hasAndBelongsToMany = array(
            'Item' => array(
                'className' => 'Item',
                'joinTable' => 'recipes_items',
                'foreignKey' => 'recipe_id',
                'associationForeignKey' => 'item_id',
            )
        );
    }

.

class RecipesItem extends AppModel {
    var $name = 'RecipesItem';

// id : int
// quantity : int
// unit_id : int
// recipe_id : int
// item_id : int



    var $belongsTo = array(
        'Unit' => array(
            'className' => 'Unit',
            'foreignKey' => 'unit_id'
        ),
        'Recipe' => array(
            'className' => 'Recipe',
            'foreignKey' => 'recipe_id'
        ),
        'Item' => array(
            'className' => 'Item',
            'foreignKey' => 'item_id'
        )
    );
}

Ответы [ 3 ]

0 голосов
/ 29 августа 2011

это не то, что Cake может сделать для тебя.Может быть, есть некоторые js, которые могут вам помочь, но вам для этого придется написать свой собственный javascript.

0 голосов
/ 29 августа 2011

Вы должны использовать javascript, чтобы «преобразовать» тег select в нечто «круче».

Вот плагин jquery-multiselect, который я использую довольно часто.Вы можете легко настроить его, чтобы заменить все ваши мультиселекторы на 1 строку кода.

Подробнее здесь: http://www.erichynds.com/jquery/jquery-ui-multiselect-widget/

0 голосов
/ 28 августа 2011

Не совсем уверен, что вы спрашиваете.Для добавления, редактирования и удаления элементов вам потребуется создать действия в контроллере элементов.Сохранение данных ассоциации (то есть, какие элементы есть в рецепте) должно обрабатываться более или менее автоматически с помощью метода save () в вашем действии контроллера, при условии, что ваши формы настроены правильно.

Из любопытства, откуда появилась модель RecipesItem?Что это представляет?Если я вас правильно понимаю, у вас есть модель Рецепта и модель Предмета, имеющие отношение HABTM.Вам не нужна модель для их таблицы соединений, таблица recipes_items просто связывает элементы двух моделей.

...