2012-11-05 7 views
7

親オブジェクトの「表示」ビューに「編集」フォームを表示したいとします。Railsの別のモデルの「表示」ページで「編集」フォームの部分をレンダリングする方法

私のモデルは次のようになります。 旅行には多くのアクティビティが含まれています。 Tripは、Daysのネストされた属性を受け入れます。 Daysはアクティビティのネストされた属性を受け入れます。

旅行の「表示」ビューにいるとき、「アクティビティ」の「編集」フォームの一部をどのようにレンダリングしますか?

編集フォームに部分的に指定する必要があることはわかっていますが、どのアクティビティIDを編集するかはわかりませんが、その情報を「旅行」の「表示」ビューから渡す方法はわかりません。

<% @trip.days.each do |day| %> 
    <div id="daydiv_<%= day.id %>"> 
     <b><%= day.summary %></b> 
     <%= content_tag_for :ol, day do %> 
      <% day.activities.each do |activity| %> 
       <li id="activity_<%= activity.id %>"><%= link_to activity.address, edit_activity_path(activity) %></li> 
      <% end %> 
     <% end %> 
    </div> 
    <% end %> 

<div id="activity_form"> 
    <%= render :partial => "/activities/form", :activity => @activity %> 
</div> 

私/活動/このような部分的なルックスを形成する:

<%= form_for(@activity) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br /> 
    <%= f.text_field :title %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 
+0

、見た目はスリムで見るdarkside..haveにやってき:https://gist.github.com/4021515 –

答えて

5

これは私がやってしまったことですし、それが動作します。

私の "trip"のshow.html.erbにあります。編集」活動」へ

show.html.erb

<div id="activity_form"> 
<h2>Activities</h2> 
</div> 

リンク注意:リモート=>これはとても編集をレンダリングするAJAX要求になりますRailsのコントローラを伝えている真。部分的にこのフォームjs.erb

<%= link_to activity.location[0, 20], edit_day_activity_path(day, activity), :class=>"btn btn-info fixedwidthbtn", method: :get, :remote => true 

_form.html.erbは、活動ビューディレクトリ(../views/activities/_form.html.erb)の下にある。

<%= form_for([@day, @activity], :remote => true) do |f| %> 
<fieldset> 
    <%= f.label :title, "Activity" %> 
    <%= f.text_field :title, :rows => 1 %> 
</fieldset> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
</form> 
    <%= link_to 'Delete', [@day, @activity], method: :delete, data: { confirm: 'Are you sure?' } %> 
<% end %> 

edit.js.erbこれは、活動ビューディレクトリ(../views/activities/edit.js.erb)の下でファイルです。私は、更新部分をレンダリングするために、編集フォーム上の更新を打った後、このJavaScriptを含ま update.js.erb

$("#activity_form").html("<%= escape_javascript(render(:partial => "form"))%>"); 

「activity_form」のIDでDOM要素を取得し、部分的に「フォーム」をレンダリングするために言います活動リストだから私は更新を見るためにページをリロードする必要はありません。

$("#activities_list").html("<%= escape_javascript(render(:partial => "/trips/activities")) %>"); 

routes.rbをこれはどのように私の巣私のルートです。ベストプラクティスに沿って1段階だけ実行します。無関係なノートで

resources :trips do 
    resources :days 
end 

resources :days do 
    resources :activities 
end 
+0

私はAjaxのCRUDで多くのことを扱っ。あなたの答えは2つの問題を解決します。 ajaxを使用してフォームをレンダリングし、ネストされたモデルのフォームをレンダリングします。どうもありがとう。 – Dieglock

関連する問題