1

SQLlite Rails 3 アプリを Mongoid Rails 3 アプリに転送する際に問題が発生しています。SQLlite バージョンでは、あるモデル (「画像」) からの画像アップロード フォーム (ペーパークリップを使用) を、別のモデル (「製品」) からのネストされたフォーム内に簡単に含めることができます。これが私の「新しい」製品フォームです。

  <%= form_for @product, :html => {:multipart => true} do |f| %>
     <% f.fields_for :images do |image_form| %>
       <%= f.label :productphoto %>
       <%= f.file_field :productphoto %><br />
    <% end %>
 <% end %>

そして、ここに「ショー」ビューがあります:

    <% @product.images.each do |image| %>
      <%= image_tag image.productphoto.url(:gallerythumb) %><br />
    <% end %>

Mongoid Rails 3 アプリ (Carrierwave を使用) で同じ製品ビューを使用しようとすると、次のエラーが発生します。

    TypeError in Stores#show: 
    can't convert nil into String
    <%= image_tag product.image.url(:gallerythumb) %>

「イメージ」モデルに文字列(「名前」など)を追加し、それを「製品」フォームにネストすると機能するため、Mongoid バージョンのモデルが正しいと確信しています。また、ネストされていないモデル フォームに画像をアップロードすることもできます。

どんな助けでも大歓迎です!

4

3 に答える 3

2

私自身も同様の問題を抱えていました。問題は画像のアップロードではないと思いますが、Rails が :images を配列として認識しないことが問題です。fields_for ヘルパーの Rails ソースを調べると、メソッド「_attributes=」をチェックしていることがわかります。それがない場合、フォームは配列ではなく通常のフィールドとして投稿されます (params は「images[0]」ではなく「images」になります)。

モデルに次の行を追加する必要があります。

accepts_nested_attributes_for :images
于 2010-08-20T08:34:50.143 に答える
0

これは、Lewy がリンクしている可能性が最も高い問題です。この問題は、Carrierwave アップローダーが埋め込み関連付けの子ドキュメントにマウントされ、親を保存している場合に固有のものですが、これがあなたのデータがどのようにモデル化されているか、ネストされていないフォームで動作することに気付いたので、それが当てはまると思います(おそらく、親ではなく子ドキュメントを保存します)。

その問題からリンクされているディスカッションを掘り下げると、提案された回避策がいくつか見つかります。この状況でCarrierwaveを機能させるために私が最終的に得たものは次のとおりです。

https://gist.github.com/759788

完全な功績は、私がその要点を分岐した zerobearing2 によるものです。Rails 3.0.3 で動作するようにマイナーな変更を加え、関連する議論に関する要約情報で私の要旨にコメントしました。

于 2010-12-30T14:33:43.853 に答える
0

搬送波またはモンゴイドバグです

https://github.com/jnicklas/carrierwave/issues#issue/81

于 2010-11-25T07:45:45.450 に答える