未定义的方法`albums_path'

undefined method `albums_path'

我不明白为什么会这样,但我收到了这个错误。 undefined method albums_path 它说它在这段代码的第一行:

<%= form_for @album, :html => { :class => 'form-horizontal', multipart: true } do |f| %> 
    <div class="control-group">
      <%= f.label :name, :class => 'control-label' %>
      <div class="controls">

但我不明白为什么。这是我的控制器:

class AlbumsController < ApplicationController
  before_action :set_album, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
    @user = User.find_by_id(params[:id])
    @albums = Album.all.where(:user_id => @user)
  end

  def show
    redirect_to user_albums_url
  end

  def new
    @album = Album.new
  end

  def edit
  end

  def create

    @album = current_user.albums.new(album_params)

    respond_to do |format|
      if @album.save

        if params[:images]
          params[:images].each { |image|
            @album.pictures.create(image: image)
          }
        end
          format.html { redirect_to @album, notice: 'Gallery was successfully created.' }
          format.json { render json: @album, status: :created, location: @album }
      else
          format.html { render action: "new" }
          format.json { render json: @album.errors, status: :unprocessable_entity } 
      end
    end
  end

  def update
    @album.update(album_params)
    redirect_to user_albums_url
  end

  def destroy
    @album.destroy
    redirect_to user_albums_url
  end

  private
    def set_album
      @album = Album.find(params[:id])
    end

    def album_params
      params.require(:album).permit(:name, :description, :images)
    end
end

我的路线如下:

resources :users do
    resources :albums do
      resources :pictures do
        resources :comments
      end
    end
  end

我到处寻找我的代码,甚至提到了 "albums_path",但它并没有在任何地方说明。你们能想到什么问题吗?我试过修复表格,但它似乎不起作用。您可能希望看到的另一件事是 link 到新操作。这里是:

<%= link_to 'New Album', new_user_album_path(:user_id => current_user.id), :class => 'btn btn-mini' %>

我不知道这是否有帮助,但我正在使用回形针 gem 创建相册。

您的 albums 资源嵌套在 users 资源中。因此,您应该在 new 操作中设置用户(或者,更好的是,在 before_filter 中):

before_filter :set_user
# ...
def set_user
  @user = User.find(params[:user_id])
end

并在您的表单中添加用户参考:

form_for [@user, @album] do |f|

顺便说一句,除了 @albums = Album.all.where(:user_id => @user),您还可以使用(Rails 中更惯用的):@albums = @user.albums