0

在我的 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} %>

标题数据标签确实返回了步骤的名称,但我的图像数据标签出现错误。当我在 Rails 控制台中尝试它时,它会返回图像的文件路径,但是当我尝试在我的应用程序中实现它时,我收到错误undefined method `file' for nil:NilClass

当我从我的图像标签中删除“文件”时(所以它是图像:steps.find_by_number(i).images.order("position ASC").first),并返回每个链接的图像数据标签是什么,我得到[对象对象]。

我怎样才能让它返回正确的查询结果?

这是我的步骤控制器:

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
4

1 回答 1

1

原因是以下整个事情变得零

images.order("position ASC").first

最可能的问题可能是当您选择 step by 时i,可能会有一个没有图像的数据集

为避免出现此错误,您可以做的一件事是使用try

steps.find_by_number(i).images.order("position ASC").first.try(:file)
于 2013-02-10T19:01:42.017 回答