2016-06-13 40 views
1

這應該是非常簡單的,但我看不出我做錯了什麼。 上傳的「新建」頁面中的表單出現錯誤。未定義的方法`upload_path' - Ruby on Rails中的'new'動作

  • '' 上傳屬於 '事件'
  • '事件' 有很多 '上傳'
  • 的routes.rb是(據我所知)是正確的。
  • 我打算重新提交使用將文件上傳到S3(按this教程...不知道這是否是相關的一切雖然)

Upload.rb

class Upload < ActiveRecord::Base 
    belongs_to :event 
    attachment :upload_file 
end 

Event.rb

class Event < ActiveRecord::Base 
    has_many :uploads 
end 

uploads_controller.rb

class UploadsController < ApplicationController 
    before_action :set_event 

    def new 
    @upload = @event.uploads.create 
    end 


    private 
    def set_event 
     @event = Event.find(params[:event_id]) 
    end 
end 

的routes.rb

Rails.application.routes.draw do 

    devise_for :users 
    root 'pages#home' 

    resources :events do 
    resources :coupons 
    resources :uploads 
    member do 
     post :check 
    end 
    end 

視圖/上傳/ new.html.erb(實施例)

<%= form_for @upload do |f| %> 
    <%= f.text_field :name %> 
<% end %> 

當我導航到'新'頁面,我收到以下錯誤:

未定義的方法`upload_path」爲#<#:0x007fb8709229f0>

爲什麼我不能添加與事件相關聯的新上傳?我知道我錯過了一件超級簡單的東西,但我無法把它放在手指上。

回答

2

由於uploads嵌套在events,你得到的網址爲您上傳路徑如下:

/events/1/uploads/new

在這種情況下,您必須在您的form_for方法中指定@event,如下所示:

<%= form_for [@event, @upload] do |f| %>

0

嘗試將這些添加到您的控制器(修改新動作):

def new 
    @upload = @event.uploads.new 
end 

def create 
    @upload = Upload.create(upload_params) 
end 

def upload_params 
    params.require(:upload).permit(:name) 
end 
0

或者乾脆

<%= form_for @event.upload do |f| %> <%= f.text_field :name %> <%= f.submit %> <% end%>

相關問題