我检查过代码是对的但是我无法检测到为什么照片没有上传到数据库中的问题。
class PhotosController < ApplicationController
def new
@photo = Photo.new
end
def create
debugger
@photo = Photo.new(photo_params)
if @photo.save
render "show", :notice=> "photo created"
else
render "index", :notice=> "photo could'nt be saved"
end
end
def photo_params
params.require(:photo).permit(:image)
end
end
我对照片的看法#new如下
<%= form_for :photo , :url=>{:action=>'create'},:html => { :multipart => true } do |f| %>
<%= f.file_field :image %>
<%= f.submit "Save" %>
<% end %>
这是我的照片模型
class Photo < ActiveRecord::Base
belongs_to :user
has_many :comments
has_many :photos_tags
has_many :tags, through: :photos_tags
has_attached_file :image, :styles => { :medium => "300x300>", :thumb => "100x100>" }, :default_url => "/images/:style/missing.png"
validates :user, presence:true
validates_associated :user
validates_attachment_presence :image
validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/
end
Thanx提前帮助..
答案 0 :(得分:0)
模型中的belongs_to
关系会在您的照片表中生成user_id
列,您会收到错误,&#34;用户不能为空白&#34;应该来自此,因为我不知道您将照片与上传用户的关联点。
如果你有一个current_user
帮助者(如果你正在使用设计,那么你已经在那里,如果没有,你可能想要设置它,你可以查看这个SO答案:https://stackoverflow.com/a/12719996/2726340) ,你可以这样做:
def create
@photo = Photo.new(photo_params)
@photo.user = current_user
#it should populate the user_id column accordingly if current_user is a User object
if @photo.save
render "show", :notice=> "photo created"
else
render "index", :notice=> "photo could'nt be saved"
end
end
可能有另一种方式,但我认为这个方法非常简单。