我的模型看起来像这样:
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
?
答案 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)