3

グループとメンバーの 2 つの関連モデルがあります。

Group.rb :

has_many :members, :dependent => :destroy
accepts_nested_attributes_for :members, :reject_if => lambda { |a| a[:email].blank? and a[:id].blank? }, :allow_destroy => true

私がやりたいことは、members_count が 25 に達するとすぐにメンバーを追加できないようにする検証を追加することです。

グループを編集する場合、たとえば次のようにします。

  1. 20人の既存メンバーがいます
  2. ブラウザ側で FORM からさらに 8 人のメンバーを追加します

最初の 5 つのレコードが保存され、「ネストされた属性の制限を超えました」などのエラーが発生します。

これを行うためのレールに組み込みの方法はありますか。Railsの比較的初心者である私はこれに気づいていません??

4

3 に答える 3

11

あなたのモデルで:

accepts_nested_attributes_for :field, limit: 10

あなたの保存方法で:

def update
  begin
    # normal model update
    if Model.update_attributes(params[:your_model])
      flash[:notice] = 'Save success'
    else
      flash[:error] = 'Save error'
    end
  rescue ActiveRecord::NestedAttributes::TooManyRecords
    flash[:error] = 'Too many records'
  end
end
于 2013-10-01T08:34:16.827 に答える
6

組み込みメソッドも知りません。ただし、独自の検証ルーチンを追加できます。

validate :member_limit

def member_limit
  errors.add(:base, "You sir, have too many members!") if members.count > 25
end

これにより、基本モデルにエラーが追加されます。25を超える関連付けにエラーを追加することもできると思いますmembers.errors.add(:base, "Sorry, no room for you.")

詳細を読むためのガイドは次のとおりです。

http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations

于 2013-01-16T19:09:00.907 に答える
6

ネストされた属性で制限オプションを使用しようとしましたか?

    accepts_nested_attributes_for :field, limit: 10

作成できるネストされた関連付けの数を制限できます。

于 2013-02-06T02:52:57.913 に答える