我一直在試圖弄清楚如何通過嵌套模型將多個圖像上傳到一個模型一段時間,現在沒有運氣。我有一個項目模型,併爲每個項目我想上傳多個圖像。我創建了一個名爲Picture的模型,並將其嵌套在Project模型中,並設置了回形針,除非上傳圖像並單擊「創建項目」,否則該圖像不會顯示在「顯示」頁面上。沒有顯示錯誤消息。請幫忙,因爲我不知道如何從這裏出發。rails回形針 - 通過嵌套模式上傳多個圖像到一個模型時遇到問題
這裏是我的代碼:
項目形式:
<%= bootstrap_nested_form_for @project, :html => {:multipart => true} do |f| %>
<% f.fields_for :pictures do |builder| %>
<% if builder.object.new_record? %>
<p>
<%= builder.file_field :image %>
</p>
<% end %>
<%= builder.link_to_remove "Remove" %>
<% end %>
<p>
<%= f.link_to_add "Add Images", :pictures %>
</p>
<%= f.submit %>
<% end %>
項目控制器: -
class ProjectsController < ApplicationController
before_action :set_project, only: [:show, :edit, :update, :destroy]
respond_to :html
def index
@projects = Project.all
respond_with(@projects)
end
def show
respond_with(@project)
end
def new
@project = Project.new
@project.pictures.build
respond_with(@project)
end
def edit
@project = Project.find(params[:id])
@project.pictures.build
end
def create
@project = Project.new(project_params)
if @project.save
flash[:notice] = "Successfully created project."
redirect_to @project
else
render :action => 'new'
end
end
def update
@project.update(project_params)
respond_with(@project)
end
def destroy
@project.destroy
respond_with(@project)
end
private
def set_project
@project = Project.find(params[:id])
end
def project_params
params.require(:project).permit(:id, :title, :description, :status, :phase, :location, pictures_attributes: [:id, :image])
end
end
項目模式: -
class Project < ActiveRecord::Base
has_many :pictures, :dependent => :destroy
accepts_nested_attributes_for :pictures, :reject_if => lambda { |t| t['picture'].nil? }
end
圖片型號: -
class Picture < ActiveRecord::Base
belongs_to :project
has_one :image
has_attached_file :image,
:path => ":rails_root/public/system/:attachment/:id/:style/:filename",
:url => "/system/:attachment/:id/:style/:filename",
:styles => { :medium => "300x300>", :thumb => "100x100>" }
validates_attachment_content_type :image, :content_type => ["image/jpg", "image/jpeg", "image/png", "image/gif"]
end
顯示頁面: -
<% @project.pictures do |picture| %>
<%= image_tag picture.image_url %>
<% end %>
<p>
<strong>Title:</strong>
<%= @project.title %>
</p>
<p>
<strong>Description:</strong>
<%= @project.description %>
</p>
<p>
<strong>Status:</strong>
<%= @project.status %>
</p>
<p>
<strong>Phase:</strong>
<%= @project.phase %>
</p>
<p>
<strong>Location:</strong>
<%= @project.location %>
</p>
<%= link_to 'Edit', edit_project_path(@project) %> |
<%= link_to 'Back', projects_path %>
模式: -
ActiveRecord::Schema.define(version: 20150728092717) do
create_table "pictures", force: true do |t|
t.datetime "created_at"
t.datetime "updated_at"
t.string "image_file_name"
t.string "image_content_type"
t.integer "image_file_size"
t.datetime "image_updated_at"
t.integer "project_id"
end
add_index "pictures", ["project_id"], name: "index_pictures_on_project_id"
create_table "projects", force: true do |t|
t.string "title"
t.text "description"
t.string "status"
t.string "phase"
t.string "location"
t.datetime "created_at"
t.datetime "updated_at"
end
如果創建圖像,那麼你顯示它錯了。這個'<%= image_tag picture.image_url%>'應該是'<%= image_tag picture.image.url(:medium)%>' – Pavan
試過這個但仍然沒有顯示圖像。任何想法還有什麼可能導致這個問題? –