У меня есть приложение rails 3.2 для планировщика бюджета.
В моей модели есть пользователь, у пользователя есть один бюджет, и у каждого бюджета есть много Budget_items. При создании пользователя для него создается бюджет.
Когда пользователь получает доступ к своему бюджету, я вставляю пустое поле Budget_item, если у него его нет. Однако то, что я хотел бы сделать, это предварительно заполнить каждый бюджет набором статей бюджета по умолчанию с предполагаемыми затратами. Это можно сделать либо при создании бюджета, либо при доступе пользователя к пустому бюджету.
Я хотел бы как можно более чистую реализацию, так как я пытаюсь делать вещи «правильным образом» в Rails (еще не совсем так, если вы видите какой-либо необычный код:)
Мой код можно увидеть здесь: https://github.com/michaelward82/WeddingPlanner
Хорошо, хотя наши ответы будут считаться лучше, чем быстрые ответы. Я дам разумное количество времени, прежде чем дать правильный ответ.
Редактировать:
Мне удалось создать записи по умолчанию, изменив мой BudgetsController следующим образом:
class BudgetsController < ApplicationController
def show
if current_user
@budget = current_user.budget
if @budget.budget_items.empty?
set_default_budget_items @budget
end
else
redirect_to log_in_path
end
end
def update
@budget = current_user.budget
if @budget.update_attributes(params[:budget])
redirect_to budget_path, :flash => { :success => "Budget changes saved" }
else
redirect_to budget_path, :flash => { :error => "Budget changes were not saved" }
end
end
private
def set_default_budget_items(budget)
default_budget_items = [
{ "description"=>"Insurance", "estimated_cost"=>"110", "actual_cost"=>"0", "position"=>"1"},
{ "description"=>"The Service", "estimated_cost"=>"520", "actual_cost"=>"0", "position"=>"2"},
{ "description"=>"Reception (venue, food & drinks)", "estimated_cost"=>"4000", "actual_cost"=>"0", "position"=>"3"}
]
default_budget_items.each {|b| @budget.budget_items.new(b) }
end
end
Это лучший способ? Я рад пойти с этим, но если есть более чистый способ организовать это, я был бы рад узнать. Элементов по умолчанию значительно больше, чем показано выше, поэтому я сомневаюсь, что мой контроллер является местом для хранения этих данных.