Ruby on Rails: заполнение данных для пользователя при регистрации? - PullRequest
2 голосов
/ 30 января 2010

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

def after_create(user)
  user.recipes.create(:name => "Sample Recipe", :description => "This is a sample recipe.")
  user.cuisines.create(:name => "Sample Cusine", :description => "This is a sample cuisine.")
  ...
end

Это слишком ресурсоемко, если у меня есть 10 моделей, которым нужны начальные данные при регистрации? Есть ли более эффективный способ?

Ответы [ 2 ]

4 голосов
/ 30 января 2010

Вы делаете это правильно, и вот почему:

  • Как бизнес-логика (каждый пользователь должен начать с образца кухни и рецепта), она относится к модели.
  • Здесь это наиболее легко проверить.
  • Если их все равно нужно создавать для каждого пользователя, есть не менее «ресурсоемкий» способ сделать это. Любой пакетный процесс на время оставит пользователя без этих значений по умолчанию.

Лично я бы, вероятно, пропустил добавленную абстракцию и сложность помещения его в наблюдателя, потому что я хотел бы, чтобы при чтении модели это было очевидно. Но это личное предпочтение, и нет ничего плохого в том, как вы настроили его здесь.

0 голосов
/ 30 января 2010

Почему бы не установить эти значения по умолчанию в вашей базе данных? Таким образом, при использовании кода не используются дополнительные ресурсы, это на одну точку отказа меньше, и вам не нужно вручную создавать примеры в ассоциациях. Вы можете назначить столбцу значение по умолчанию:

class AddRecipesDefaults < ActiveRecord::Migration
  def self.up
    change_column :recipes, :name, :string, :default => "Sample Recipe"
    change_column :recipes, :default, :string, :default => "This is a sample."
  end

  def self.down
    change_column :recipes, :name, :string, :default => nil
    change_column :recipes, :name, :string, :default => nil
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...