現在、5 つのブール属性があります。私はそれらに対してカスタム検証を行います:
def limit_impacts
i = 0
choices = [self.first_attr, self.sec_attr, self.third_attr, self.fourth_attr, self.fifth_attr]
choices.each do |choice|
if choice == true
i+=1
end
end
if i > 2
errors[:base] << ("There must be one or two impacts.")
end
end
2 つ以上が true に設定されているかどうかをテストし、その場合はエラーを設定します。:base error
1つの属性のみに直接関係していないため、aを設定しています。
私は単に検証のためにこれを行っています:validate :limit_impacts
およびこれを処理するビューの部分:
= f.input :first_attr, :as => :boolean
= f.input :sec_attr, :as => :boolean
= f.input :third_attr, :as => :boolean
= f.input :fouth_attr, :as => :boolean
= f.input :fifth_attr, :as => :boolean
問題は、2 つ以上のチェックボックスをオンにするとエントリが保存されず、それは正常なことですが、ビューにエラー メッセージが表示されないことです。
私は何を間違っていますか?
ちなみに、レールコンソールでテストしました:
MyModel.errors[:base]
=> ["There must be one or two impacts."]
そして、この構文も機能しません:
errors.add :base, "message"
編集:これが私のコントローラーです。編集方法についてです。
def edit
@page_title = t('projects.edit.title')
@project = Project.find(params[:id])
@steps = @project.steps
@rewards = @project.rewards
@project_bearer = @project.user
end
これらの属性に関連するものはありません。
Rails コンソールからプロジェクトを作成しようとすると、 false が返されます。
2.0.0p247 :001 > t = Project.create(:social_influence => true, :environmental_influence => true, :economical_influence => true)
=> <Project all my attributes ..>
2.0.0p247 :002 > t.save
(1.2ms) BEGIN
(2.0ms) ROLLBACK
=> false
解決 :
問題は、レンダリングとリダイレクトの間の私の更新方法でした。@delba のおかげで解決しました。解決策を見たい場合は、彼の回答のコメントに議論があります。