Запрос Rails: неопределенный метод для nil:NilClass

В моем приложении Rails у меня есть проекты со многими шагами, и каждый шаг имеет много изображений.

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

<%= 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} %>

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

Когда я удаляю "файл" из своего тега изображения (так что это изображение: steps.find_by_number(i).images.order("position ASC").first), и я возвращаю тег данных изображения для каждой ссылки, я получаю [Объект 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

person scientiffic    schedule 10.02.2013    source источник
comment
Можешь выложить код контроллера?   -  person eabraham    schedule 10.02.2013


Ответы (1)


Причина этого в том, что все становится равным нулю

images.order("position ASC").first

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

чтобы избежать этой ошибки, вы можете использовать try

steps.find_by_number(i).images.order("position ASC").first.try(:file)
person sameera207    schedule 10.02.2013
comment
эй, это работает! В конце концов я обнаружил это право, когда вы публиковали свой ответ; поскольку некоторые шаги в настоящее время не имеют изображений, он не смог найти пути к файлам. Я все еще сталкиваюсь с проблемой, когда путь к файлу возвращается как [object Object] — я ожидаю, что он будет выглядеть как /image/file/190/01_00.jpg - person scientiffic; 10.02.2013
comment
интересно, я попытался проиндексировать массив объектов (не знал, как это сделать), но получил ошибку: неопределенный метод `[]' для /image/file/190/01_00.jpg:FileUploader Так что кажется как будто он получает путь к файлу, но прикрепляет к нему этот :FileUploader? - person scientiffic; 10.02.2013
comment
рад помочь, и если вы хотите получить что-то вроде '/image/file/190/01_00.jpg', вам, вероятно, следует использовать что-то вроде file.file_name. потому что я думаю, что файл - это объект, и вам нужно вызвать метод, который возвращает имя файла. - person sameera207; 11.02.2013