Rails路由-表单中的第一个参数不能包含nil或为空



我有一个rails应用程序,它有一个Listing模型,它有_many Courses和_many Course_photos。

装载新课程照片的铁路路线为"listing_course_photos"或/lists/:listing_id/courses/:id/course_photos(.:format)

在尝试加载此表单以上传课程照片时,我遇到以下错误。。。

错误

ArgumentError in Listings#courses
Showing /Users/Jack_R/code/rails/planet_study/app/views/courses/_photo_upload.html.erb where line #1 raised:
First argument in form cannot contain nil or be empty

路由嵌套如下:

resources :listings, except: [:edit] do
member do
*****
end
resources :courses, except: [:edit] do
#delete :destroy, on: :collection
member do
******
resources :course_photos, only: [:create, :destroy]
end
end
end

我正在上传部分视图/课程/_photo_pload.html.erb:的照片

<%= form_for @course, url: listing_course_photos_path([@listing, @course]), method: 'post', html: {multipart: true} do |f| %>
<div class="row">
<div class="form-group">
<span class="btn btn-default btn-file text-babu">
Select Photos
<%= file_field_tag "images[]", type: :file, multiple: true %>
</span>
</div>
</div>
<div class="text-center">
<%= f.submit "Add Photos", class: "btn btn-form" %>
</div>
<% end %>
<br/>
<div id="course_photos"><%= render 'course_photos/course_photos_list' %></div>

这反过来又使这个部分:

<% if @course_photos.count > 0 %>
<br/>
<div class="row">
<% @course_photos.each do |photo| %>
<div class="col-md-4">
<div class="panel panel-default">
<div class="panel-heading preview">
<%= image_tag photo.image.url %>
</div>
</div>
<% end %>
</div>
</div>
<% end %>

Course_Photos控制器

class CoursePhotosController < ApplicationController
before_action :set_listing
before_action :set_course, except: [:index, :new, :create]
def create
@listing = Listing.find(params[:listing_id])
@course = Course.find(params[:course_id])
@listing.course = listing.course
if params[:images]
params[:images].each do |img|
@course.course_photos.create[image: img]
end
@photos = @course.course_photos
redirect_back(fallback_location: request.referer, notice: "Saved...")
end
end
private
def set_course
@listing = Listing.find(params[:listing_id])
@course = Course.find(params[:id])
end
def set_listing
@listing = Listing.find(params[:listing_id])
end
end

如有任何建议,将不胜感激

您应该初始化控制器中的@course变量

@course = @listing.courses.build

但似乎你上传文件的方式不对。也许你应该创建/编辑一个课程并以嵌套的形式上传文件。或者考虑多个文件上传(更难的方式)。

最新更新