1

私のアプリでは、新しい投稿を作成するためのフォームを作成しました (投稿はモデルです)。投稿という名前のコントローラーがあります。フォームは管理者コントローラーにあります。フォームは form_for(@post) を使用します。ポストコントローラーに投稿します。この方法では、投稿が正常に作成されます。しかし、問題は提出の失敗です。フォームに、エラーを表示するコードを追加しました

    <% if @post.errors.any? %>
        <div id="error_explanation">
            <div class="alert alert-error">
                The form contains <%= pluralize(@post.errors.count, "error") %>
            </div>
            <ul>
                <% @post.errors.full_messages.each do |msg| %>
                    <li> <%= msg %> </li>
                <% end %>
            </ul>
        </div>
    <% end %>

しかし、post コントローラーでは、送信に失敗した場合、admins コントローラーの newpost ページに redirect_to に設定しました。リダイレクトすると、エラー メッセージが表示されなくなります。

だから、私は追加しました

render 'dasharea/newpost'

localhost:3000/dasharea/newpost はフォームのあるページの URL です。このコードでは、

Missing template dasharea/newpost with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}.

しかし、私はすでにそのページにいますか?次に、コントローラーとアクションを次のように追加しようとしました(注:投稿コントローラーの作成アクションを編集しています。管理コントローラーでnewpostアクションをレンダリングする必要があります):

render 'admins/newpost'

次に、投稿に移動します:

http://localhost:3000/posts

しかし今、フォームはそこにあり、エラーを見ることができます。しかし、フォーム (dasharea/newpost) を持っている元のページをレンダリングする必要があります! これどうやってするの?私は何を間違えましたか?

4

3 に答える 3

2

私の解決策: AJAX フォーム。もう問題はありません。その場でフォームをjavascriptで更新。必要に応じてリダイレクトすることもできwindow.location.href = '/your-url'ます。

HTML リクエストを処理する必要がある場合は、いつでもフォームを選択した URL に向けることができます。

form_for @post, url: route_to_current_controller

このコントローラーで create_post アクションを処理し、ルートが適切に設定されていることを確認してください。悪い面は、PostsController とは別のコントローラーで投稿の作成を処理することになります。

于 2013-02-02T19:23:20.317 に答える
1

を探しているかもしれませんrender template: 'admins/newpost'。テンプレートの欠落に関するエラーが引き続き発生する場合は、views/admins/newpost で使用可能な形式に対してリクエストの形式を確認してください。

于 2013-02-01T03:53:18.360 に答える
0

I think you might want to render new, when there are errors present. The error message should be populated automagically by rails.

Also Can you verify there is a file called newpost.html.erb inside app/views/dasharea ?

于 2013-02-03T12:33:03.920 に答える