Обычный способ сделать это в Rails - создать маршрут, соответствующий URL-адресам, например: /projects/4/photos/new
. Делать что-то другое зависит от вас, но Rails позволяет действительно легко делать такие вещи, как это. Подробнее о маршрутах в Rails 3 .
Ваша запись в routes.rb
должна выглядеть примерно так:
resources :projects do
resources :photos
end
Тогда в app/controllers/photos_controller.rb
у вас будет это для страницы формы "Новое фото":
def new
@project = Project.find_by_id(params[:project_id])
end
и это для действия, которое форма в app/views/photos/new.html.erb
отправляет:
def create
@project = Project.find_by_id(params[:project_id])
@photo = @project.photos.create(params[:photo])
end
Конечно, здесь вы захотите обработать и проверить ошибки, но это суть. И помните, используйте GET
для идемпотентных (без изменения состояния) действий (например, GET /projects/4/photos
), POST
для создания новой вещи (например, POST /projects/4/photos
) и PUT
для обновления существующей вещи (например, PUT /projects/4/photos/8
).