2

has_many「Assets」を持つモデル「Update」があります。アセットにはhas_attached_file、ペーパークリップを使用した:assetがあります。

更新フォーム(を使用fields_for)を使用して複数のアセットを正常に作成できますが、更新を編集するときに、アセットの「sort_order」と呼ばれる追加の非ペーパークリップ属性を更新できません。新しい値が投稿されましたが、オブジェクトが更新されていないようです。

モデル/アセット.rb

...
belongs_to :update
...

models / update.rb

has_many :assets, :dependent => :destroy
...
accepts_nested_attributes_for :assets, :allow_destroy => true

attr_accessibleどちらのモデルも使用していません。

ビュー/更新/_form.html.erb

<ul class="existing-images">
    <%= f.fields_for :assets do |a| %>
        <% unless a.object.new_record? %>
            <li>
                <%= link_to image_tag(a.object.asset.url(:small)), a.object.asset.url(:original) %>

                <%= a.check_box :_destroy %>
                <%= a.label :_destroy %>

                <%= a.text_field :sort_order %>
                <%= a.label :sort_order %>
            </li>
        <% end %>
    <% end %>
    </ul>

上のa.text_field :sort_orderフィールドに、アセットのデフォルトのsort_orderが表示されますが、更新できません。

このフィールドに入力された新しい値は、ログに従って送信されます。

  Parameters: {"utf8"=>"✓", "authenticity_token"=>"2IUei4WR7fRpsM0TKD3Yk8u5FlYv2FDszzjJc3y4eG8=", "update"=>{"year"=>"2011", "week"=>"39", "title"=>"A new piece of work", "content"=>"", "assets_attributes"=>{"3"=>{"_destroy"=>"0", "sort_order"=>"1", "id"=>"1"}, "4"=>{"_destroy"=>"0", **"sort_order"=>"20"**, "id"=>"2"}}, "video_url"=>"", "quote"=>"", "allow_reactions"=>"1", "is_published"=>"1", "allow_public_feed"=>"0"}, "id"=>"1"}
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 1 LIMIT 1
  Update Load (0.2ms)  SELECT "updates".* FROM "updates" WHERE "updates"."id" = ? LIMIT 1  [["id", "1"]]
  Asset Load (0.4ms)  SELECT "assets".* FROM "assets" WHERE "assets"."update_id" = 1 AND "assets"."id" IN (1, 2) ORDER BY assets.sort_order
   (0.1ms)  SELECT 1 FROM "updates" WHERE ("updates"."update_type_id" = 1 AND "updates"."id" != 1 AND "updates"."year" = 2011 AND "updates"."week" = 39 AND "updates"."user_id" = 1) LIMIT 1
  Update Load (0.1ms)  SELECT "updates".* FROM "updates" WHERE "updates"."id" = 1 LIMIT 1
[paperclip] Saving attachments.

("sort_order" => "20"は新しい値です)まだ値は保存されていません。

これは、_destroyチェックボックスが期待どおりに機能しているにもかかわらずです。

それが十分な情報であることを願っています。誰か助けてくれたらとてもありがたいです!!

4

1 に答える 1

1

アセットモデルでattr_accessibleを使用する必要があると思います。

attr_accessible :sort_order

それはあなたの問題を解決するはずです。

于 2011-09-29T14:04:10.150 に答える