QA@IT
«質問へ戻る

376
タイトル
多対多のためniクラスで起こったvalidationを、どうやってコントローラで取得するのか?
多対多のために作ったクラスで起こったvalidationを、どうやってコントローラで取得するのか?

多対多のために作ったクラスで起こったvalidationを、どうやってコントローラで取得するのか?

現在、Rails3.2で開発しているのですが、多対多のために作ったクラスで定義したvalidationを、どうやってコントローラで取ればいいのかわかりません。

具体的にこのQA@ITを例に説明させていただきます。

前提として「質問=question」、「タグ=tag」とさせていただきます。
そしてこの2つは、「QuestionTag」というテーブルで関連付けされているものとします。

  • Validation条件

このQA@ITの質問には、タグが10個以上つけれないものとする。

  • 上記のValidationを実装したQuestionTagモデルのソース
# coding: utf-8

class QuestionTag < ActiveRecord::Base
  attr_accessible :question_id, :tag_id

  belongs_to :tag
  belongs_to :question

  validate do
      if question.try(:tags).try(:count).try(:>=,10)
        errors.add("tag_id","タグを10個以上登録できません")
      end
  end
end
  • 上記のQuestionTagを呼び出すコントローラのnewメソッド
class QuestionTagsController < ApplicationController
     def new
       begin
         qeustion.tags << tag ##これで10個こえてしまうものとする
       rescue => ex
         ???.errors   ##ここでどうやってQuestionTag.errorsを取ればいいのかわからない
         return render :nothing => true, :status => 400
       end
     end
end

上記のようにvalidationが発生した場合に、「タグを10個以上登録できません」という文字を取得して、Viewに投げたいのですが、どのインスタンスにアクセスすればいいのかわかりません。

他にも、もっといいValidationの掛け方があるとか、本題とずれた指摘もあればご指摘いただけると幸いです。

現在、Rails3.2で開発しているのですが、多対多のために作ったクラスで定義したvalidationを、どうやってコントローラで取ればいいのかわかりません。

具体的にこのQA@ITを例に説明させていただきます。

前提として「質問=question」、「タグ=tag」とさせていただきます。
そしてこの2つは、「QuestionTag」というテーブルで関連付けされているものとします。

- Validation条件

このQA@ITの質問には、タグが10個以上つけれないものとする。

- 上記のValidationを実装したQuestionTagモデルのソース

```rb
# coding: utf-8

class QuestionTag < ActiveRecord::Base
  attr_accessible :question_id, :tag_id

  belongs_to :tag
  belongs_to :question

  validate do
      if question.try(:tags).try(:count).try(:>=,10)
        errors.add("tag_id","タグを10個以上登録できません")
      end
  end
end
```

- 上記のQuestionTagを呼び出すコントローラのnewメソッド

```rb
class QuestionTagsController < ApplicationController
     def new
       begin
         qeustion.tags << tag ##これで10個こえてしまうものとする
       rescue => ex
         ???.errors   ##ここでどうやってQuestionTag.errorsを取ればいいのかわからない
         return render :nothing => true, :status => 400
       end
     end
end
```

上記のようにvalidationが発生した場合に、「タグを10個以上登録できません」という文字を取得して、Viewに投げたいのですが、どのインスタンスにアクセスすればいいのかわかりません。

他にも、もっといいValidationの掛け方があるとか、本題とずれた指摘もあればご指摘いただけると幸いです。

質問を投稿

多対多のためniクラスで起こったvalidationを、どうやってコントローラで取得するのか?

現在、Rails3.2で開発しているのですが、多対多のために作ったクラスで定義したvalidationを、どうやってコントローラで取ればいいのかわかりません。

具体的にこのQA@ITを例に説明させていただきます。

前提として「質問=question」、「タグ=tag」とさせていただきます。
そしてこの2つは、「QuestionTag」というテーブルで関連付けされているものとします。

  • Validation条件

このQA@ITの質問には、タグが10個以上つけれないものとする。

  • 上記のValidationを実装したQuestionTagモデルのソース
# coding: utf-8

class QuestionTag < ActiveRecord::Base
  attr_accessible :question_id, :tag_id

  belongs_to :tag
  belongs_to :question

  validate do
      if question.try(:tags).try(:count).try(:>=,10)
        errors.add("tag_id","タグを10個以上登録できません")
      end
  end
end
  • 上記のQuestionTagを呼び出すコントローラのnewメソッド
class QuestionTagsController < ApplicationController
     def new
       begin
         qeustion.tags << tag ##これで10個こえてしまうものとする
       rescue => ex
         ???.errors   ##ここでどうやってQuestionTag.errorsを取ればいいのかわからない
         return render :nothing => true, :status => 400
       end
     end
end

上記のようにvalidationが発生した場合に、「タグを10個以上登録できません」という文字を取得して、Viewに投げたいのですが、どのインスタンスにアクセスすればいいのかわかりません。

他にも、もっといいValidationの掛け方があるとか、本題とずれた指摘もあればご指摘いただけると幸いです。

現在、Rails3.2で開発しているのですが、多対多のために作ったクラスで定義したvalidationを、どうやってコントローラで取ればいいのかわかりません。

具体的にこのQA@ITを例に説明させていただきます。

前提として「質問=question」、「タグ=tag」とさせていただきます。
そしてこの2つは、「QuestionTag」というテーブルで関連付けされているものとします。

- Validation条件

このQA@ITの質問には、タグが10個以上つけれないものとする。

- 上記のValidationを実装したQuestionTagモデルのソース

```rb
# coding: utf-8

class QuestionTag < ActiveRecord::Base
  attr_accessible :question_id, :tag_id

  belongs_to :tag
  belongs_to :question

  validate do
      if question.try(:tags).try(:count).try(:>=,10)
        errors.add("tag_id","タグを10個以上登録できません")
      end
  end
end
```

- 上記のQuestionTagを呼び出すコントローラのnewメソッド

```rb
class QuestionTagsController < ApplicationController
     def new
       begin
         qeustion.tags << tag ##これで10個こえてしまうものとする
       rescue => ex
         ???.errors   ##ここでどうやってQuestionTag.errorsを取ればいいのかわからない
         return render :nothing => true, :status => 400
       end
     end
end
```

上記のようにvalidationが発生した場合に、「タグを10個以上登録できません」という文字を取得して、Viewに投げたいのですが、どのインスタンスにアクセスすればいいのかわかりません。

他にも、もっといいValidationの掛け方があるとか、本題とずれた指摘もあればご指摘いただけると幸いです。