0

と という 2 つの異なるモデルがParentありChildます。

両方のフォームHouseがあるというページがあります。link_to

ページ/house.html.erb

link_to "Parent", new_parent_path

link_to "Child", new_child_path

ページを開始すると、フォームがなく空です。

new_parentリンクをクリックして同じページに親フォームを生成できるようにしたいのですが、リンクをクリックnew_childすると親フォームを削除し、AJAX によって子フォームに置き換えたいと考えています。どうすればいいですか?

4

2 に答える 2

4

Ajax を使わずに css を使った方が簡単だと思います。ページに 2 つのフォームを生成し (たとえばパーシャルを使用)、非表示の div 内に配置し (css スタイル: display: none)、リンクで javascript を使用して、表示するフォームを含む div を表示/非表示にします (JQuery show を使用)効果を非表示にする)

于 2012-06-15T20:12:51.590 に答える
0

これは実際に作成するのは非常に簡単でした。This questionthis oneは、AJAXとjqueryをよりよく理解するのに役立ちました。

例として親を使用しましょう。

アクションformat.jsのためにコントローラーに入れました:new

ParentsController

def new
 @parent = Parent.new

 respond_to do |format|
  format.js
 end
end

個人的な選択としてmy を削除し、 myによって呼び出されるものにparents/new.html.erb置き換えます。new.js.erb"Parent" link_to

# parents/new.js.erb

$("#generate-form").html("<%= escape_javascript(render(:partial => 'parents/form', locals: { parent: @parent })) %>");

remote => true次に、AJAX 用のパーシャルで親フォームを作成します。

# parents/_form.html.erb

<%= form_for(@parent, :remote => true) do |f| %>
    <%= f.input :full_name %>    
  <%= f.button :submit, 'Done' %>
<% end %>

次に、両方のフォームを保持する 1 つのページがあります。

PagesController

def index

  respond_to do |format|
    format.html
  end
end

次に、そのページの親と子の両方のリンク。

#pages/index.html.erb

<li><%= link_to "Parent", new_parent_path, :remote => true %></li>
<li><%= link_to "Child", new_child_path, :remote => true %></li>

<div id="generate-form">
</div>          

remote => true私のリンクとフォームの は、私のアクションの形式に対応し、ボスとしての私のjs行為は、いずれかのフォームの一部をその中に配置します。これにより、クリックしたリンクに応じて自動的に一方が他方に置き換えられるため、フォームが動的に変更されます。newdiv id="generate-form"

注: 子モデルのコードは同じです (フォーム フィールドを除く)。モデル名を置き換えるだけです (親から子へ)。

于 2012-06-18T02:55:16.297 に答える