0

レールエラーをレンダリングするのに少し問題があります。主な問題は、ビューでエラーが配列出力を表示し、一緒に結合されないことです (ユーザーフレンドリー)。ビューに「結合」メソッドを追加できます。これは、複数のエラーがある属性で正常に機能します。当然ですが、属性にエラーが 1 つしか含まれていない場合、これは壊れます。

そのため、現在、コントローラーにエラーを結合して、属性に複数のエラーがある場合にきれいに見えるようにしようとしています。ビューに .join メソッドを追加しようとしても機能しません。これは、エラーが 1 つあるインスタンスでは機能しないためです (文字列に対して join メソッドを呼び出すことができないため)。

コントローラーでこれを機能させる方法についてのヘルプは素晴らしいでしょう。この問題を処理する別の方法に関する提案も素晴らしいです。(このようにコントローラーで配列エラーをきれいに/結合しようとする私のロジックから)

コントローラ:

if @person.errors.blank? && @person.save
  flash[:info] = "Your profile has been successfully updated."
  redirect_to profile_url(@person) and return
else
  if @person.errors.on(:first_name).is_a?(Array)
    @person.errors.on(:first_name).join
  end
  flash[:warning] = "Sorry, there was a problem saving your profile. Please try again."
  render :edit
end

意見:

%li
        = label(:person, :first_name, "First Name")
        = f.text_field :first_name
        - if @person.errors[:first_name].present?
          %span{:style => "color: red; margin-left: 180px;"}=   @person.errors[:first_name]
4

2 に答える 2

1

メソッドを簡単に使用できますto_a。文字列を配列に変換し、配列に対しては何もしません。

次のようなカスタム バリデータを作成する必要があります: http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations

その後、次のようにコードをリファクタリングできます

if @person.save
  flash[:info] = "Your profile has been successfully updated."
  redirect_to profile_url(@person)
else
  @person.errors[:first_name] = @person.errors.on(:first_name).to_a.join
  flash[:warning] = "Sorry, there was a problem saving your profile. Please try again."
  render :edit
end
于 2012-07-17T00:09:00.420 に答える
1

積み重ねて!

if @person.errors.present?
  @person.errors.each do |err|
    = err

または、この以前の投稿を読んで、エラーをカスタマイズするための非常にカラフルな方法を使用してください。

Rails 検証エラー メッセージ: フィールドごとに 1 つのエラー メッセージのみを表示する

于 2012-07-17T00:09:37.703 に答える