使用关系的未定义方法“index_path”

Posted

技术标签:

【中文标题】使用关系的未定义方法“index_path”【英文标题】:undefined method `index_path' using relation 【发布时间】:2013-01-23 21:34:48 【问题描述】:

使用设备和carrierwave gem 时出现以下错误:

undefined method `user_media_index_path'
.Showing .../user_medias/new.html.erb where line #3 raised:

我在 user_media 模型中的 user_id 上添加了索引

我已经成功实现了单个模型的文件上传,但我不知道如何使用单独的模块来完成。

new.html

form_for @media, :html =>:multipart =>true do |f|
  Upload an Image  f.file_field :image
  f.submit 
end

这是使用设备 gem 生成的用户模型:

user.rb

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :user_media, dependent: :destroy

end

它是存储用户媒体(如图像等)的模型;我现在仅将其用于图像 但是为了将来添加更多类型的媒体,我创建了这个 user_media 模型

user_media.rb

class UserMedia < ActiveRecord::Base
  attr_accessible :anudio, :image, :video
  belongs_to :user

  mount_uploader :image, MediaUploader
end

当被要求创建上传图片的操作时,它会被重定向到这里

user_medias_controller

class UserMediasController < ApplicationController
  def new
    @media = UserMedia.new
  end

  def create
    @media=current_user.user_media.build(params[:media])

    if @media.save
      render'index'
    else
      render'new'
    end
  end
end

路由详情是:

routes.rb

Projectx::Application.routes.draw do
  get "dashboard/index"
  resources :dashboard, :UserMedias
  get "home/index"
  devise_for :users

  root :to => 'home#index'

  match 'uploder' =>'UserMedias#new'

rake routes output这一切都是在添加@peter建议的资源之后

dashboard_index GET /dashboard/index(.:format) 仪表盘#index 获取 /dashboard(.:format) 仪表板#index POST /dashboard(.:format) 仪表板#create new_dashboard GET /dashboard/new(.:format) 仪表板#new edit_dashboard GET /dashboard/:id/edit(.:format) 仪表板#edit 仪表板 GET /dashboard/:id(.:format) 仪表板#show PUT /dashboard/:id(.:format) 仪表板#update 删除 /dashboard/:id(.:format) 仪表板#destroy user_medias GET /user_medias(.:format) user_medias#index POST /user_medias(.:format) user_medias#create new_user_media GET /user_medias/new(.:format) user_medias#new edit_user_media GET /user_medias/:id/edit(.:format) user_medias#edit user_media GET /user_medias/:id(.:format) user_medias#show PUT /user_medias/:id(.:format) user_medias#update 删除 /user_medias/:id(.:format) user_medias#destroy home_index GET /home/index(.:format) home#index new_user_session GET /users/sign_in(.:format) 设计/会话#new user_session POST /users/sign_in(.:format) 设计/会话#create destroy_user_session 删除 /users/sign_out(.:format) 设计/会话#destroy user_password POST /users/password(.:format) 设计/密码#create new_user_password GET /users/password/new(.:format) 设计/密码#new edit_user_password GET /users/password/edit(.:format) 设计/密码#edit PUT /users/password(.:format) 设计/密码#update cancel_user_registration GET /users/cancel(.:format) 设计/注册#cancel user_registration POST /users(.:format) 设计/注册#create new_user_registration GET /users/sign_up(.:format) 设计/注册#new edit_user_registration GET /users/edit(.:format) 设计/注册#edit PUT /users(.:format) 设计/注册#update 删除 /users(.:format) 设计/注册#destroy 根/主页#index 上传者 /uploder(.:format) user_medias#new

【问题讨论】:

向我们展示rake routes的输出 【参考方案1】:

错误指向您的路线文件中缺少的路线。将此添加到您的路线中

resources :user_medias

【讨论】:

这可能是正确的答案。 form_for(@media) 通过 post 请求查找与 user_medias_path 匹配的路由,但由于您的路由中未声明任何路由,因此会引发该错误。 Plz/ 检查上面我已经在路由中添加了资源:user_medias 但没有放在这里。还有 rakr 路由输出,但仍然是同样的错误,顺便说一下,我使用的是 rails 3.2.6。 我很确定这与名称是两个单词有关。你找到解决这个问题的方法了吗?

以上是关于使用关系的未定义方法“index_path”的主要内容,如果未能解决你的问题,请参考以下文章

关于学说 m:n 关系的未定义索引

`enablePlugins` 方法使用的未定义变量?

nil:NilClass 的未定义方法“每个”,但我使用了实例变量

使用 AJAX 刷新 Rails 部分时的未定义方法

为啥在使用静态方法时取消引用 nullptr 而不是 C++ 中的未定义行为?

对结构方法的未定义引用[重复]