照片未从控制器上传到数据库中

时间:2014-08-04 09:07:53

标签: ruby-on-rails paperclip

我检查过代码是对的但是我无法检测到为什么照片没有上传到数据库中的问题。

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提前帮助..

1 个答案:

答案 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

可能有另一种方式,但我认为这个方法非常简单。