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 コンソールで試してみると、イメージへのファイル パスが返されますが、アプリに実装しようとすると、nil:NilClass の undefined method `file'というエラーが発生します。

画像タグから「ファイル」を削除すると (画像: 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

この理由は、次のすべてが nil になるためです

images.order("position ASC").first

最も考えられる問題は、ステップを で選択したときにi、画像を持たないデータセットが存在する可能性があることです。

このエラーを回避するために、できることの1つは使用することですtry

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