使用tinymce上传图像时用户为零

时间:2015-03-11 19:47:59

标签: ruby-on-rails

我的模型看起来像这样:

class Post < ActiveRecord::Base    

has_attached_file :file

def user_name
  @user.name
end

belongs_to :user

end

我可以创建一个新帖子(没有图片)没问题。但是,当我尝试插入图像时,出现undefined method 'name' for nil:NilClass错误。如果我取出user_name,图片上传工作。

表格如下:

<%= simple_form_for @post do |f| %>
  <%= f.text_area :body, :class => "tinymce textarea" %>
<% end %>

这是错误:

Processing by TinymceAssetsController#create as HTML
...
(0.2ms)  begin transaction
(0.1ms)  rollback transaction
Completed 500 Internal Server Error in 134ms

NoMethodError (undefined method `name' for nil:NilClass):
app/models/post.rb:14:in `user_name'
app/controllers/tinymce_assets_controller.rb:6:in `create'

并且继承了控制器:

class TinymceAssetsController < ApplicationController
respond_to :json

def create
 geometry = Paperclip::Geometry.from_file params[:file]
 question = Question.create params.permit(:file, :alt, :hint)
 @user = User.find(question.user_id)

 render json: {
   image: {
     url:    question.file.url,
     height: geometry.height.to_i,
     width:  geometry.width.to_i
   }
 }, layout: false, content_type: "text/html"

 end
end

上传图片时如何访问user

2 个答案:

答案 0 :(得分:1)

这不是一个小问题。你的控制器错了:

question = Question.create params.permit(:file, :alt, :hint)
 @user = User.find(question.user_id)

你需要做这样的事情:

question = current_user.questions.create params.permit(:file, :alt, :hint)

或者如果您要直接创建问题,请从某处设置用户。您编写的内容会创建一个包含3个参数的问题:file,alt和hit但不会设置用户。

答案 1 :(得分:0)

它看起来不像User类的实例,因此当您引用它时,rails会告诉您它是一个空对象。

@user = User.find(@post.user_id)