0

これが私がやろうとしたことです:

irb(main):008:0> c.title = "Another Test"
=> "Another Test"
irb(main):009:0> c.save
   (0.7ms)  BEGIN
  FriendlyId::Slug Load (1.0ms)  SELECT "friendly_id_slugs".* FROM "friendly_id_slugs" WHERE "friendly_id_slugs"."sluggable_type" = 'Contest' AND (slug = 'another-test-challenge' OR slug LIKE 'another-test-challenge--%') AND (sluggable_id <> 64) ORDER BY LENGTH(slug) DESC, slug DESC LIMIT 1
   (0.5ms)  ROLLBACK
=> false

アプリでこれを実行しようとすると(つまり、編集フォームを使用して)、次の問題が発生します。

2013-01-10T17:53:47+00:00 app[web.2]: cache: [POST /mycontroller/this-is-the-old-title] invalidate, pass

オブジェクトのタイトルを編集できないようです。これは、オブジェクトに関連付けられているフレンドリIDにも相当します。

4

1 に答える 1

1

あなたの答えc.saveは、そのオブジェクトの検証を呼び出します。検証に失敗すると、SQL トランザクションがロールバックされます。

トランザクションが取得されたROLLBACK場合、オブジェクトc.errors.full_messagesにエラーとどの検証が失敗したかを確認するか、検証が失敗した場合に例外を発生させるc.saveuseを使用する代わりに要求できます。c.save!

于 2013-02-06T22:29:29.800 に答える