Hun*_*Luu 7 ruby-on-rails ruby-on-rails-3
我想在父对象的"显示"视图中显示"编辑"表单.
我的模型看起来像这样:旅行有很多天有很多活动.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>
Run Code Online (Sandbox Code Playgroud)
my/activities/form partial看起来像这样:
<%= form_for(@activity) do |f| %>
<div class="field">
<%= f.label :title %><br />
<%= f.text_field :title %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
这就是我最终做的,它的工作原理.
在我的show.html.erb中为我的"旅行".
show.html.erb
<div id="activity_form">
<h2>Activities</h2>
</div>
Run Code Online (Sandbox Code Playgroud)
链接到"编辑"一个活动.请注意:remote => true告诉Rails控制器这将是一个AJAX请求,以便呈现edit.js.erb
<%= link_to activity.location[0, 20], edit_day_activity_path(day, activity), :class=>"btn btn-info fixedwidthbtn", method: :get, :remote => true
Run Code Online (Sandbox Code Playgroud)
_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 %>
Run Code Online (Sandbox Code Playgroud)
edit.js.erb这是Activities视图目录下的一个文件(../views/activities/edit.js.erb).说获取ID为"activity_form"的DOM元素并呈现部分"形式"
$("#activity_form").html("<%= escape_javascript(render(:partial => "form"))%>");
Run Code Online (Sandbox Code Playgroud)
update.js.erb我在编辑表单上点击更新后包含了这个javascript,以呈现活动列表的更新部分.这样我就不必重新加载页面来查看更新.
$("#activities_list").html("<%= escape_javascript( render(:partial => "/trips/activities") ) %>");
Run Code Online (Sandbox Code Playgroud)
routes.rb这就是我嵌套路线的方式.只按照最佳实践做1级.
resources :trips do
resources :days
end
resources :days do
resources :activities
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |