2015-03-11 3 views
0

У меня есть модель, которая выглядит следующим образом:ноль Пользователь при загрузке изображения с TinyMCE

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' 

и Heres контроллер TinyMCE:

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

, не видя формы, я не могу сказать точно, но могу сказать, что объект, который вы называете 'name' on, равен нулю. Итак, посмотрите на свою форму и выясните, какой у объекта нет. - Возможно, попробуйте '@ user.name' – xcskier56

+0

Не могли бы вы вставить соответствующее действие контроллера и форму? – xcskier56

+0

Отредактировано. Я использую tinymce для загрузки изображения, поэтому у меня есть отдельный контроллер для загрузки изображений. Я вложу полную ошибку. – user2759575

ответ

1

Его не вопрос TinyMCE. Ваш контроллер неправильно:

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

Вам нужно сделать что-то вроде этого:

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

или, если вы собираетесь создать свой вопрос, задайте пользователю куда-нибудь. То, что вы написали, создает вопрос с тремя параметрами: file, alt и hit, но не устанавливает пользователя.

+1

Я бы также рекомендовал переместить 'params.permit' в частный метод, чтобы его можно было использовать повторно и очищать. [Ссылка] (https://github.com/rails/strong_parameters/blob/master/README.md) – xcskier56

0

Не похоже, что экземпляр класса User определен, поэтому, когда вы ссылаетесь на него, рельсы говорят вам, что это нулевой объект.

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

+0

Я не уверен, где поставить эту линию. Я отредактировал вопрос с моей попыткой, но все равно не повезло. – user2759575

+0

User.find (@ post.user_id) .name равно nil и поэтому @user = User.find (@ post.user_id) – user2759575

+0

А я вижу, что контроллер tiny_mce устанавливает экземпляр пользователя. Таким образом, похоже, что вы получаете нулевой объект, когда вы вызываете @ user = User.find (question.user_id). Я бы отбросил отладчик сразу после этой строки и выяснил, что такое значение @user. Если nil, question.user_id, вероятно, будет и ноль. Когда вы делаете Question.create, модель получает идентификатор пользователя? –

Смежные вопросы