2

リダイレクトする代わりに、安らかなコントローラーでアクションを実行した後にレンダリングするにはどうすればよいですか。

標準アクションのコントローラーがあり、問題のリソースにデータを追加する特別なアクションを、#show ページ (投稿のコメントについて考えてください) のフォームを介して追加しました。フォームからの入力を検証しており、エラー時に show アクションを再レンダリングし、成功時に show アクションにリダイレクトしたいと考えています。

ユーザーが情報を 2 回入力するのを防ぐためにレンダリングしたいのですが、flash[:notice] でエラーが発生して show アクションをレンダリングしようとすると、ID を指定していないというエラーが表示されます。ID を指定すると、まだ存在しない新しいテンプレートをレンダリングしようとします。

私はそれが次のように単純であるべきだと考えています:

def add_comment
  if my_validation?
    save the object
    redirect_to :action => "show", :id => params[:id]
  else
    render :action => "show", :id => params[:id]
  end
end

これは私の実際のコードではなく、例として今まとめたものです。

4

2 に答える 2

2

最善の方法は、:new を再レンダリングすることです

def create
  @obj = TheObject.new(params[:object])
  render :action => :new unless @obj.save
end

そして new.html.erb で

<% form_for :obj, 
  :url => object_url(@obj), :html => {:method => :post} do |f| %>

  <%= f.text_field :name %>
<% end %>

そうすれば、フォームの入力は、ユーザーが入力した内容で事前に入力されます。

于 2008-12-04T18:34:16.667 に答える
0

新しいデータ オブジェクトを作成し、フォームから値を追加します。再レンダリングする前に、それが機能すると考えてください。それでも問題が発生する場合は、新しい行と既存の行を編集するためにブール値を設定するか、2 つの異なるビューを完全に作成してみてください。

以前やったことがありますが、よく覚えていません。MVC パターンの非常に典型的な使用法を使用した場合、ほとんど「自動」であった場合もあれば (古い風変わりなデータベースを使用しなければならなかったため)、すべての魔法を自分でコーディングする必要があった場合もありました。.new?ActiveRecord オブジェクトの関数 (またはそれが呼び出されたもの) を使用することもあれば、ID に一時的な「マジック値」を使用することもありました (通常、無効な ID 値のアルファベット文字列.

(Rails コードをコーディングしてからしばらく経ちましたので、間違いがありましたらお詫びします...)

于 2008-12-04T18:38:21.620 に答える