写真アルバムのウェブアプリを作ろうとしています。ユーザー、アルバム、写真の 3 つのモデルがあります。
構成/ルート
Pholder::Application.routes.draw do
resources :users do
resources :albums do
resources :photos
end
end
Album#show の URL でわかるように、ユーザーを作成し、ユーザーの下にアルバムを作成することができました。
http://localhost:3000/users/20/albums/94
(問題なし)
ただし、そのページでは、すべてユーザーの下にあるアルバムの下に写真を作成するためのリンクを作成したいと考えています (/users/20/albums/94/photos/new のような URL を持つもの) rake routes
。パスがありnew_album_photo
ます。これは私のアルバム/ショー ビューです
show.html.erb
<% if @album.photos.any? %>
yes pics
<% else %>
no pics
<% end %>
<%= link_to "Upload new pics!", new_album_photo_path(@album) %>
ただし、それをクリックすると、2 つの問題が発生します。
- 次のエラーが表示されます。
No route matches [GET] "/albums/94/photos/new"
- URL に user_id が含まれていません...
http://localhost:3000/albums/94/photos/new
. 私のモデルがこれを引き起こしている可能性があります(私のモデルによれば、アルバムは複数のユーザーによって所有されているためですか?結合テーブルを削除してAlbum
モデルを結合テーブルにする必要があるかどうかはわかりません(おそらく結合テーブルが原因です) ?)
これは私のモデルのせいでしょうか?または、ルートヘルパーで間違ったパラメーターを渡していますか?
ここに私のモデルがあります。モデル:
class User < ActiveRecord::Base
has_secure_password
attr_accessible :email, :name, :password, :password_confirmation
validates_presence_of :password, :on => :create
validates_format_of :name, :with => /[A-Za-z]+/, :on => :create
validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :on => :create
validates_length_of :password, :minimum => 5, :on => :create
has_many :album_user
has_many :albums, :through => :album_user
accepts_nested_attributes_for :albums
end
class AlbumUser < ActiveRecord::Base
belongs_to :album
belongs_to :user
end
class Album < ActiveRecord::Base
attr_accessible :avatar, :name, :description
has_many :album_user
has_many :users, :through => :album_user
has_many :photos
end
class Photo < ActiveRecord::Base
belongs_to :album
end
ルート
user_albums GET /users/:user_id/albums(.:format) albums#index
POST /users/:user_id/albums(.:format) albums#create
new_user_album GET /users/:user_id/albums/new(.:format) albums#new
edit_user_album GET /users/:user_id/albums/:id/edit(.:format) albums#edit
user_album GET /users/:user_id/albums/:id(.:format) albums#show
PUT /users/:user_id/albums/:id(.:format) albums#update
DELETE /users/:user_id/albums/:id(.:format) albums#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
album_photos GET /albums/:album_id/photos(.:format) photos#index
POST /albums/:album_id/photos(.:format) photos#create
new_album_photo GET /albums/:album_id/photos/new(.:format) photos#new
edit_album_photo GET /albums/:album_id/photos/:id/edit(.:format) photos#edit
album_photo GET /albums/:album_id/photos/:id(.:format) photos#show
PUT /albums/:album_id/photos/:id(.:format) photos#update
DELETE /albums/:album_id/photos/:id(.:format) photos#destroy
albums GET /albums(.:format) albums#index
POST /albums(.:format) albums#create
new_album GET /albums/new(.:format) albums#new
edit_album GET /albums/:id/edit(.:format) albums#edit
album GET /albums/:id(.:format) albums#show
PUT /albums/:id(.:format) albums#update
DELETE /albums/:id(.:format) albums#destroy
root / users#index
about /about(.:format) home#about
help /help(.:format) home#help
contact /contact(.:format) home#contact
さらにファイルが必要な場合はお知らせください。