0

新しい を作成するための空のフィールドを持つform_for @transaction新しいフォームをレンダリングする がありますTransaction

ここで、ユーザーがトランザクションをやり直しできるようにしたいと考えています。したがって、ユーザーは多くのトランザクションを持っています。また、すべてのトランザクションには「トランザクションのやり直し」リンクがあります。ユーザーがこのリンクをクリックすると、新しいレンダリング用に同じフォームが必要になりますが、ユーザーがやり直したいTransactionからのフィールドが入力されています。Transaction

今、私transaction_controller.rbはこれを持っています:

def new
  @transaction = current_user.transactions.new
  @repeat_transaction = current_user.transactions.new(params[:transaction])
end

ビューでやり直すためのリンクは次のとおりTransactionです。_transaction.rb

<%= link_to(content_tag(:i, '', class: 'icon-repeat'),
            new_transaction_path(@repeat_transaction),
            class: 'transaction_redo_icon',
            style: 'display: none;',
            remote: true) %>

これで、空のフォームがレンダリングされます。

ありがとう!

4

4 に答える 4

1

やり直しリンクは次のようになります

<%= link_to "Redo transaction", new_transaction_path(@transaction) %>

そして、コントローラーの新しいメソッドを次のように書き直します

def new
  @transaction = params[:id] ? current_user.transactions.new : current_user.transactions.find(params[:id]) 
end
于 2013-07-25T06:01:04.553 に答える
0

editコントローラー アクションを介して、link_torenderの組み合わせを使用できます。editと同じフォームをnewで使用したい場合は、 renderを介して呼び出すことができるパーシャルを使用してください。パーシャルの詳細については、こちらを参照してください。

トランザクションを「やり直す」には、編集コントローラー アクションを (対応する編集ビューと共に) 作成します。「トランザクションのやり直し」へのリンクは、次の行に沿っている必要があります。

<%= link_to "Redo Transaction", edit_transaction_path %>

たとえば、あなたのショービューで。

次に、編集ビューで、_form.html.erbなどのパーシャルをビューフォルダーに含めることでレンダリングできます。

<%= render 'form' %>

部分的な_form.html.erb のコードを呼び出す編集ビューで。このパーシャルには、新しいで使用するフォームと同じフォームを含めることができます。実際、新しいビューにもこの render ステートメントを含めることができ、コードを DRY にすることができ、 editの場合と同じフォームをnewでもレンダリングします。Rails が入力を行います。

編集:

属性が入力された新しいトランザクション レコードを作成する場合は、属性を入力するフォーム フィールドを必ずしも非表示にする必要がないことを除いて、Link_to でパラメータを渡すに関する私の投稿に従うことができます。

于 2013-07-25T06:11:00.103 に答える
0

存在するオブジェクトに対してを使用しdupて、存在するオブジェクトを複製できます。

def new
  @transaction = Transaction.new
  @transaction = current_user.transactions.find(params[:id]).dup 
end

とリンクすることができます

<%= link_to "Redo transaction", new_transaction_path(@transaction) %>
于 2013-07-25T06:34:06.970 に答える