2013-02-10 6 views
0

В моем приложении Rails у меня есть проекты, которые имеют много шагов, и каждый шаг имеет много изображений.Rails Query: Неопределенный метод для nil: NilClass

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

<%= link_to "", project_step_path(@project, i), :class=> "dot", 
data: {title: steps.find_by_number(i).name, 
image: steps.find_by_number(i).images.order("position ASC").first.file} %> 

Тэг данных заголовка возвращает имя шага, но я получаю сообщение об ошибке с тегом данных изображения. Когда я пытаюсь использовать его в консоли rails, он возвращает путь к файлу изображения, но когда я пытаюсь реализовать его в своем приложении, я получаю ошибку undefined method `file 'для nil: NilClass.

Когда я удаляю «файл» из моего тега изображения (так что это изображение: шаги.find_by_number (i) .images.order («позиция ASC»)), и я возвращаю то, что для тега данных изображения для каждого link, я получаю [object Object].

Как я могу получить его для возврата правильного результата запроса?

Вот мой шаги контроллер:

class StepsController < ApplicationController 

    before_filter :get_project 

    def show 
    @step = @project.steps.find_by_number(params[:id]) 
    @image = Image.new 
    @images = @step.images.order("position") 
    @steps = @project.steps.order("number") 
    @numSteps = @steps.count 

    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render :json => @step } 
    end 
    end 
    private 
    # get_project converts the project_id given by the routing 
    # into an @project object 
    def get_project 
    @project = Project.find(params[:project_id]) 
    end 
end 
+0

Можете ли вы опубликовать свой код контроллера? – eabraham

ответ

1

Причина этого заключается в следующем вся вещь становится нулевым

images.order("position ASC").first 

наиболее возможная проблема может быть, когда вы выбираете шаги по i, может быть набор данных, который не имеет изображений

, чтобы избежать получения этой ошибки, вы можете сделать только одну вещь: try

steps.find_by_number(i).images.order("position ASC").first.try(:file) 
+0

эй, это работает! Я закончил тем, что открыл это право, когда вы отправляли ответ; потому что некоторые шаги в настоящее время не имеют изображений, он не смог найти пути к файлам. Я все еще сталкиваюсь с проблемой, когда путь к файлу возвращается как [объект Object] - я ожидаю, что это будет выглядеть как «/image/file/190/01_00.jpg» – scientiffic

+0

интересно, я попробовал индексировать массив объектов (не знаю, было ли это так), но я получил ошибку: undefined method '[] 'для /image/file/190/01_00.jpg:FileUploader Итак, похоже, что он получает файл путь, но он прикрепляет это: FileUploader к нему? – scientiffic

+0

рад помочь, и если вы хотите получить что-то вроде '/image/file/190/01_00.jpg', то вы, вероятно, должны использовать что-то вроде file.file_name. coz Я думаю, что файл является объектом, и вам нужно вызвать метод, который возвращает имя файла. – sameera207

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