Приспособления инициировали образцовые обратные вызовы?

Вот erlang версия (~586 символов):

-module (xmas).
-export ([xmas/0]).
xmas() ->
    W = ["twelve drummers drumming, ",
    "eleven pipers piping, ",
    "ten lords a-leaping, ",
    "nine ladies dancing, ",
    "eight maids a-milking, ",
    "seven swans a-swimming, ",
    "six geese a-laying, ",
    "five gold rings, ",
    "four calling birds, ",
    "three french hens, ",
    "two turtle doves, and ",
    "a partridge in a pear tree."],
    io:format(lists:foldl(
    fun(X,Acc) -> Acc ++ X ++ "~n" end, "",
    ["On the " ++ day_str(Q) ++ 
    " day of Christmas, my true love gave me " ++ 
    lists:foldl(
        fun(X,Acc)-> Acc++X end,
        "", lists:nthtail(12-Q,W)) || 
        Q <- lists:seq(1,12)]),[]).
day_str(Q) ->
    case Q of
        1 -> "1st";
        2 -> "2nd";
        3 -> "3rd";
        N -> erlang:integer_to_list(N,10) ++ "th"
    end.
19
задан cakeforcerberus 1 September 2011 в 18:48
поделиться

1 ответ

Вот как это должно работать? Если Итак, почему они так спроектированы?

Да, фикстуры не используют обратные вызовы. Я предполагаю, что это из соображений производительности. Быстрее загружать данные прямо в базу данных без создания экземпляра модели.

Есть ли способ принудительного запуска обратных вызовов при загрузке приспособления?

Не знаю. У вас есть пара вариантов. Один из них - создать свои фикстуры, как если бы обратные вызовы уже были запущены. То есть вручную создать данные, которые будут выполнять обратные вызовы. Например, если у вас есть обратный вызов, который хэширует пароль пользователя, вам нужно будет хешировать пароль вручную, а затем сохранить этот хеш в приспособлении.

Второе решение (и настоятельно рекомендуется!) - использовать фабрики. Фабрики запускают обратные вызовы и позволяют использовать виртуальные атрибуты и т. Д. Это потому, что они каждый раз создают экземпляр модели. Одна из популярных жемчужин - Factory Girl . Еще можно попробовать Машинист . Я также создал серию Railscasts по этой теме.

26
ответ дан 30 November 2019 в 04:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: