7
def create
    @emppede = Emppede.new(params[:emppede])

    respond_to do |format|
      if @emppede.save
        format.html { redirect_to :action => :index, :id => @emppede.ad }
        format.json { render json: @emppede, status: :created, location: @emppede }
      else

        format.html { render action: "new", :id => @emppede.ad } *(....error)*
        format.json { render json: @emppede.errors, status: :unprocessable_entity }
      end
    end
  end

新しいメソッドで id を渡す必要があります。ここで、データが適切に保存されていれば、index メソッドに進みます。ただし、そうでない場合は、新しいものに移動する必要がありますが、params id を使用します。どのようにレンダリングアクションを介してパラメータを渡すことができますか? ここでやりたいのですが、param idが新しいメソッドに渡されません。その部分を誤ってハイライトしました。私が行った場合

 format.html { redirect_to :action => :new, :id => @emppede.ad }

その後、エラーメッセージは表示されません...

ユーザー ID を新しいメソッドに渡して、フォームを介して渡して保存できるようにする必要があります。

<div id="employm" style="display:none">


    <%= f.text_field :ad, :value=> @id%>

            </div>

しかし、フォームにエラーが発生すると、新しいフォームにレンダリングされますが、ここでは にある ID を送信する必要があります @emppede.ad。これどうやってするの?新しいメソッドに入るには、id を渡す必要があるため

redirect_to :action => :new, :id => @id
4

2 に答える 2

7

コントローラー アクションで定義したすべてのインスタンス変数がビューに表示されます。したがって@id = 11、コントローラーで定義すると、 を使用してビューでアクセスできます<%= @id %>

リダイレクトでこれを行いたい場合はparameters、ビュー内にアクセスするだけです (または、最初にコントローラーでそれらを使用してから、上記のインスタンス メソッドを使用します)。

投稿されたコードは少し不可解ですが、render はメソッドに入らず、現在のコンテキストでnewのみレンダリングします。new.html.erbしたがって、作成アクションで @id を宣言して new をレンダリングすると、それが表示されます。

:action にリダイレクトするときは、@id をパラメーターとして渡す必要があります。

于 2012-11-19T08:34:30.093 に答える
7

Render は "new.html" を探しますが、new メソッドには入りません。

于 2012-11-19T08:36:10.557 に答える