質問

だから私の背景には、Java Webサービスであるが、私は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 
     # ...

(その番組注)適切な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'

は、また新しいイメージは実際のアップロードされますんをエラーがのparams内の有効なIDを期待されている(表示するには、リダイレクトにスローされることに注意してください[:ID]といない何らかの理由でオブジェクトそれが渡されている。)

事前にあなたの助けをありがとう、と何かがあなたに飛び出すなら、私に教えてくださいます。

役に立ちましたか?

解決

のコードを見てから、問題が非RESTfulなimage_url(@image)ルートとの組み合わせでimageを使用することによって引き起こされる可能性があること私には見える。

あなたはおそらく行を削除したいと思うでしょう。

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

あなたのroutes.rbから。

の行

map.resources :images

実際にあなたのImagesController内のすべてのCRUDアクションを露出させるのに十分なはずです。

他のヒント

私の提案はルビー・デバッグを使用してImage.find呼び出しの前にブレークポイントを右に設定することです。 [:ID]のparamsを検査し、それが実際にあるものを参照してください。

より多くのゲットーのアプローチは、Image.find呼び出し前にこれを置く

logger.info params[:id].class

とその変数であるかを参照してください。それはあなたがそれを操作しているフィルタの前のいくつかの並べ替えを持っていることは可能ですか?

してみてください。

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

私は、リダイレクトをコーディングするより慣用的な方法だと思います。 RESTfulなルートについてmolfのアドバイスにと+1ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top