문제

내 배경은 Java Web Services에 있지만 ROR로 이동하려고 노력하고 있습니다.

FlexImage를 사용하여 이미지 업로드 및 썸네일 생성을 처리합니다. 나는 가이드를 따랐다. 그리고 CRUD 행동은 한 시점에서 잘 작동했다. 그러나 어느 시점에서 내 모델 중 하나 (이미지)에 대한 CRUD 동작이 깨졌습니다.

내가 돌아 오는 오류 코드는 다음과 같습니다. ActiveRecord::RecordNotFound in ImagesController#show -- Couldn't find Image with ID=#<Image:0x4e2bd74>. 다시 말해, 레일에 제작/업데이트/파괴를 말할 때 객체를 ID와 혼동하고 있습니다. 이것은 라우팅 문제가있을 수 있음을 나타냅니다. 이미지의 부분을 추가하는 것이 문제가 될 수 있다고 생각했지만 변경 사항을 롤백하는 것은 수정되지 않았습니다.

다음은 이미지 모델에 대한 컨트롤러의 새로운 쇼 및 업데이트 방법입니다.

      # images_controller.rb

        # ...

      def new
        @image = Image.new

        respond_to do |format|
          format.html # new.html.erb
          format.xml  { render :xml => @image }
        end
      end

    # ...
  def show
    @image = Image.find(params[:id])

    respond_to do |format|
      format.jpg  # show.jpg.erb 
      format.html # show.html.erb
      format.xml  { render :xml => @image }
    end
  end



    # ...

      def create
        @image = Image.new(params[:image])

        if @image.save 
        redirect_to image_url(@image)
        else
        flash[:notice] = 'Your image did not pass validation.'
        render :action => 'new'
        end
      end 
     # ...

Show ()는 물론 적절한 ID를 기대하고 있습니다. 새 이미지를 업로드하기위한 New.html.erb는 다음과 같습니다.

# new.html.erb [upload image]
<h1>New image</h1>

<% form_for @image, :html => { :multipart => true } do |f| %>
  <%= f.error_messages %>
  <table><tr><td width="50%">
  <p>
    <%= f.label :filename %><br />
    <%= f.text_field :filename %></p>
  </td>
  <td><p><b>Upload Image</b><br />
    <%= f.file_field :image_file %><br />
    or URL: <%= f.text_field :image_file_url %>
    <%= f.hidden_field :image_file_temp %>
  </td>
  <td>
    <b>Uploaded Image:</b><br />
    <%= embedded_image_tag(@image.operate { |img| img.resize 100 }) if @image.has_image? %>
  </td>
  </tr>

  </table>
  <p>
    <%= f.label :description %><br />
    <%= f.text_area :description %>
  </p>
  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', images_path %>

Routes.rb의 관련 부분은 다음과 같습니다.

# routes.rb [excerpt]

  map.resources :images
  map.image 'images/:action/:id.:format', :controller => 'images'

또한 새로운 이미지가 있습니다 실제로 업로드됩니다 그리고 오류는 표시되도록 리디렉션에 던져집니다 (매개 변수 [: id]의 유효한 ID를 기대하고 있으며 어떤 이유로 든 객체가 아닙니다.)

미리 도와 주셔서 감사합니다.

도움이 되었습니까?

해결책

코드를 살펴보면 사용으로 인해 문제가 발생할 수 있습니다. image_url(@image) 비 퇴적물과 함께 image 노선.

당신은 아마도 라인을 제거하고 싶을 것입니다

map.image 'images/:action/:id.:format', :controller => 'images'

당신의 routes.rb.

라인

map.resources :images

실제로 귀하의 모든 CRUD 작업을 노출시키기에 충분해야합니다. ImagesController.

다른 팁

내 제안은 Ruby-Debug를 사용하고 이미지를 찾기 직전에 중단 점을 설정하는 것입니다. Params [: id]를 검사하고 실제로 무엇인지 확인하십시오.

더 빈민가 접근 방식, image.find call에 이것을 넣으십시오.

logger.info params[:id].class

그리고 그 변수에 무엇이 있는지 확인하십시오. 필터를 조작하는 필터가있을 수 있습니까?

노력하다

  redirect_to :action => "show", :id => @image

나는 그것이 리디렉션을 코딩하는 더 관용적 인 방법이라고 생각합니다. 그리고 편안한 경로에 대한 Molf의 조언에 +1.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top