1

私は2つのコントローラーを持っています:DocumentsControllerそしてDashboardController
ユーザーログインが成功すると、彼はにリダイレクトされますdashboard_path。これには、このような「高速ドキュメント」を作成するためのフォームがあります。

<%= form_for @document, :html => {:class => 'well'} do |f| %>
      <% if @document.errors.any? %>
        <div id="alert alert-block">
          <div class="alert alert-error">
          <h2>Couldn't create your doc. :(</h2>

          <ul>
          <% @document.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
          <% end %>
          </ul>
          </div>
        </div>
      <% end %>
      <label>A lot of fields</label>
      <%= f.text_field :fields %>

      <div class="form-actions">
        <%= f.submit 'Create document', :class => 'btn btn-large' %>
      </div>
    <% end %>

しかし、例外が発生した場合(ユーザーがフィールドに入力するのを忘れた場合など)、「エラー」というアラートだけでなく、これらの例外を表示したいと思います...実際、これを行う方法が見つかりませんでした

これが私のDashboarControllerです

class DashboardController < ApplicationController
  before_filter :authenticate
  def index
    @document = Document.new
  end
end

と私のDocumentsController

class DocumentsController < ApplicationController
  respond_to :json, :html
  def show

  end

  def create
    @document = Document.new(params[:document])
    @document.user = current_user

    if @document.save
      redirect_to dashboard_path, notice: 'Created!'
    else
      flash[:error] = 'Error!'
      redirect_to dashboard_path
    end
  end

end

どんな助けでもありがたいです:)

4

1 に答える 1

1

成功すると正しくリダイレ​​クトされます。ただし、失敗した場合はリダイレクトしないでください。フォームが入力された場所にテンプレートをレンダリングする必要があります。

if @document.save
  redirect_to dashboard_path, notice: 'Created!'
else
  render 'dashboard/index'
end

インデックステンプレートに必要な変数がdocuments_controllerの作成アクションで使用可能であることを確認する必要があります(インデックステンプレートをレンダリングするだけで、ダッシュボードコントローラーのインデックスアクションからコードを実行していません)。明確にするために、関連するRailsガイドからの抜粋を次に示します。

:actionでrenderを使用することは、Railsの初心者にとって頻繁な混乱の原因です。指定されたアクションは、レンダリングするビューを決定するために使用されますが、Railsはコントローラーでそのアクションのコードを実行しません。ビューで必要なインスタンス変数は、renderを呼び出す前に現在のアクションで設定する必要があります。

詳細については、http: //guides.rubyonrails.org/layouts_and_rendering.html#using-renderをご覧ください。

于 2012-08-04T02:32:51.450 に答える