У меня есть проект, который настроен на следующие модели. Каждый ->
представляет has_many
соотношение:DRY контроллеры для вложенных маршрутов в Ruby
Users->Goals->Milestones
Мои маршруты для Milestones
выглядят следующим образом:
user_goal_milestones GET /users/:user_id/goals/:goal_id/milestones(.:format) milestones#index
POST /users/:user_id/goals/:goal_id/milestones(.:format) milestones#create
new_user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/new(.:format) milestones#new
edit_user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/:id/edit(.:format) milestones#edit
user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#show
PUT /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#update
DELETE /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#destroy
Я нахожусь во многих из «функций» в контроллере Вехи делать многое из этого:
def index do
@user = User.find(params[:user_id])
@goal = Goal.find(params[:goal_id])
end
def edit do
@user = User.find(params[:user_id])
@goal = Goal.find(params[:goal_id])
end
Как я могу изменить мой контроллер, так что я не должен определить @user
и @goal
все время? Я попытался поместить их прямо вверху, сразу после начала блока определения класса, но это не сработало.
Sweet! Это действительно здорово! – CamelBlues
просто убедитесь, что у вас всегда есть: user_id и: goal_id –
Это может привести к неожиданному поведению в приложении. Вы должны проверить, действительно ли прошедшая цель принадлежит переданному пользователю, иначе все может стать уродливым. Пожалуйста, добавьте тесты в свой ответ. – fotanus