Rails 3 - Создание формы для обновления записи - PullRequest
1 голос
/ 01 ноября 2010

У меня есть две следующие модели:

class PhotoAlbum < ActiveRecord::Base
    belongs_to :project
    has_many :photos, :dependent => :destroy

class Photo < ActiveRecord::Base
    belongs_to :photo_album

Когда пользователь просматривает фотографию, URL выглядит следующим образом: "/ photo_albums / 40 / photos? Page = 6"

На этой странице просмотра фотографий (внутри альбома) я хочу дать пользователю возможность обновить изображение, поэтому я использую следующее:

<% form_for [:photo, @photos.first], :url => photo_album_photos_path, :html => { :multipart => true } do |f| %>


<form method="post" id="edit_photo_124" enctype="multipart/form-data" class="edit_photo" action="/photo_albums/40/photos" accept-charset="UTF-8">

Что я считаю правильным? Проблема в том, что когда я нажимаю обновить, я получаю следующую ошибку:

No route matches "/photo_albums/40/photos"

Вот мои маршруты, которые выглядят хорошо, нет?

photo_album_photo PUT    /photo_albums/:photo_album_id/photos/:id(.:format)       {:action=>"update", :controller=>"photos"}
photo PUT    /photos/:id(.:format)                                    {:action=>"update", :controller=>"photos"}

Мысли? спасибо

ОБНОВЛЕНИЕ с файлом конфигурации маршрута:

resources :photos do
    resources :comments, :only => [:create, :update,:destroy], :constraint => {:context_type => "photos"}
    collection do
              post 'upload'
      get 'search'
    end
end


  resources :photo_albums do
        resources :comments, :only => [:create, :update,:destroy], :constraint => {:context_type => "photo_albums"}
      resources :photos
      collection do
          get 'search'
      end
    end

1 Ответ

1 голос
/ 02 ноября 2010

Попробуйте изменить свою форму на что-то вроде:

<% form_for [@photo_album, @photos.first], :html => { :multipart => true } do |f| %>

, где @photo_album - это ваш объект photo_album, или

<% form_for @photos.first, :url => photo_album_photo_path(@photo_album, @photo), :html => { :multipart => true } do |f| %>

, что в основном совпадает.Чтобы это работало, в вашем файле route.rb должно быть следующее:

resources :photo_albums do
  resources :photos
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...