具有简单形式的未定义方法路径

时间:2014-08-01 18:22:15

标签: ruby-on-rails ruby-on-rails-4 simple-form

我有albumspictures albums hasmany pictures

这是我的routes.rb

 resources :albums do
  resources :photos
end

而不是photos_path我的路径是album_photos_pathmy 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 %>

2 个答案:

答案 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 相同的结果。