5

メールアドレスを取得して保存する小さなアプリを設定し、モデルの検証(一意で有効なメール)を設定しました。これらは両方とも機能します。

以下のコードを使用してメールを保存しようとしています。すでに存在するか、有効な形式でない場合は、停止してエラーメッセージを設定する必要があります。

def create
    interest = KnownInterest.new( :email => params[:email] )
    if(interest.valid? and interest.save)
        flash[:notice] = "Thanks for showing interest, We'll be in touch with updates."
    else
        flash[:notice] = interest.errors.messages
    end     
    redirect_to action: "index"
end

これは["Eメールが無効です"]を吐き出します。これを文字列にするにはどうすればよいですか(配列ではないと思います。間違っている場合は修正してください)

4

4 に答える 4

9

最初のメッセージだけが必要な場合は、interest.errors.messages.first。それらすべてが必要な場合は、のようなものinterest.errors.full_messages.join(", ")がすべてのメッセージを1つの文字列にグループ化します。

ActiveRecordただし、検証とエラーをブラッシュアップすることをお勧めします。
これはかなり良いガイドです:

http://guides.rubyonrails.org/active_record_validations_callbacks.html

少なくとも読んでください:

于 2012-06-30T11:15:55.303 に答える
4

.messagesすべてのエラーの配列を返します。たった1つでも。

したがって、それらを適切に表示するには、ビューでこれを実行します。

- for error in flash[:notice] do
  = error

または、必要に応じてhtml.erb

<%- for error in flash[:notice] do %>
    <%= error %>
<%- end %>
于 2012-06-30T11:11:04.917 に答える
0

これは私のために働きます:

<html>
  <body>
    <%= render 'layouts/header' %>
    <div class="container">
      <% flash.each do |key, value| %>
        <div class="alert alert-<%= key %>"><%= value %></div>
      <% end %>
      <%= yield %>
      <%= render 'layouts/footer' %>
      <%= debug(params) if Rails.env.development? %>
    </div>

  </body>
</html>
于 2014-12-11T21:29:10.750 に答える
-1

interest.errors.messages.join(<any concatenating character>)配列要素を連結する文字列を作成します。

"、"、 ":"などの文字列を使用して、連結することができます。

于 2012-06-30T12:06:23.507 に答える