CRUDパラメータ問題をレール
-
21-08-2019 - |
質問
だから私の背景には、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ます。