我有albums
和pictures
albums hasmany pictures
这是我的routes.rb
resources :albums do
resources :photos
end
而不是photos_path
我的路径是album_photos_path
在my photos/new.html.erb
我收到此错误:
undefined method photos_path' for #<#<Class:0x5232b40>:0x3cd55a0>
我如何才能代替photos_path
简单表单写album_photos_path
?
我的new.html.erb
<%= simple_form_for([@album, @photo]) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
<%= f.input :description %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
答案 0 :(得分:11)
您可以在表单中指定url
。像这样:
<%= simple_form_for @photo, url: album_photos_path do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.input :title %>
<%= f.input :description %>
</div>
<div class="form-actions">
<%= f.button :submit %>
</div>
<% end %>
但是你的代码也应该有效。在你的新动作中你是否初始化了@album和@photo,类似于:
def new
@album = Album.new
@photo = @album.pictures.build
end
答案 1 :(得分:0)
您需要设置父资源。
class PhotosController < ApplicationController
before_action :set_album
# GET /albums/1/photos/new
def new
@photo = @album.photos.new
end
# POST /albums/1/photos
def create
@photo = @album.photos.new(photo_params)
# ...
end
private
# ...
def set_album
@album = Album.find(params[:album_id])
end
end
rails 试图调用 photos_path
的原因是多态路由助手将模型数组转换为路由助手方法压缩数组。 url_for([nil, Photo.new])
将产生与 url_for(Photo.new)
- photos_path
相同的结果。