Jquery Rails嵌套资源-创建和编辑2个级别,其中部分使用表单_
这件事让我绞尽脑汁。我对Rails比较陌生,尝试做一些我确信不会太难的事情 我有一个模型“旅行”,它有许多“天”,有许多“活动” 我在“Trip”的show.html.erb视图中,在此视图中,我正在为一个表单呈现一个部分,该表单应允许我创建一个新的“活动”以与“天”关联,或编辑一个已经属于“天”的现有“活动” 如何在表单partial中传递到表单_,我要为其创建新“活动”的局部变量“Day”。使用相同的表单partial,我如何检索与“活动”相关联的“天”?最终,这些将是AJAX加载的对象。 我在谷歌上搜索了几个小时,找不到类似的例子。我真的很感谢你的帮助 routes.rbJquery Rails嵌套资源-创建和编辑2个级别,其中部分使用表单_,jquery,ruby-on-rails,ruby,ajax,ruby-on-rails-3,Jquery,Ruby On Rails,Ruby,Ajax,Ruby On Rails 3,这件事让我绞尽脑汁。我对Rails比较陌生,尝试做一些我确信不会太难的事情 我有一个模型“旅行”,它有许多“天”,有许多“活动” 我在“Trip”的show.html.erb视图中,在此视图中,我正在为一个表单呈现一个部分,该表单应允许我创建一个新的“活动”以与“天”关联,或编辑一个已经属于“天”的现有“活动” 如何在表单partial中传递到表单_,我要为其创建新“活动”的局部变量“Day”。使用相同的表单partial,我如何检索与“活动”相关联的“天”?最终,这些将是AJAX加载的对象。
resources :trips do
resources :days
end
resources :days do
resources :activities
end
<div id="activity_form">
<h2>Activities</h2>
</div>
show.html.erb用于旅行
<div id="activities_list">
<%= render :partial => "activities" %>
</div>
<div id="activity_form">
<%= render :partial => "/activities/form", :locals => { :activity => @activity} %>
</div>
<div id="bottom">
<%= link_to 'Edit', edit_trip_path(@trip) %> |
<%= link_to 'Back', trips_path %>
</div>
“活动”%>
“/activities/form”,:locals=>{:activity=>@activity}%>
|
\u activities.html.erb partial
<h1><%= @trip.title %></h1>
<% @trip.days.each do |day| %>
<div id="blech_<%= day.id %>">
<b><%= day.summary %></b>
<% day.activities.each do |activity| %>
<li id="activity_<%= activity.id %>"><%= link_to activity.address, edit_day_activity_path(day, activity), :remote => true %></li>
<% end %>
<% end %>
<%= link_to 'New Activity', new_day_activity_path(day), :remote => true %>
</div>
<% end %>
真实%>
正确%>
\u form.html.erb partial我知道我需要使用(@day,@activity)变量调用day\u activity\u路径。但我不知道如何在这里获取@day变量
<%= form_for([@activity], :remote => true) do |f| %>
<fieldset>
<%= f.label :title, "Activity" %><br />
<%= f.text_field :title, :rows => 1 %><br />
</fieldset>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
true)do | f |%>
1%>
好,假设您想在一天中添加一项新活动
不要忘记,我们在这里使用REST,所以(http://old.thoughtsincomputation.com/posts/understanding-rest-in-rails-3)
我们的一天一定有很多活动
我们的活动属于一天
class Day < ActiveRecord::Base
has_many :activities
end
class Activity < ActiveRecord::Base
belongs_to :day
end
有了它,生成的路径就像
days_path
day_path
new_day_path
new_day_activity_path
delete_day_activity_path
edit_day_activity_path
resources :trips
resources :days
resources :activities
end
end
在我们的day视图中,我们的url类似于localhost:3000/days/1
(DaysController,动作秀)
在这种情况下,我们可以添加@activity=activity.new
并在部分中添加以下表格
<%= form_for [@day, @activity] do |form_field| %>
rest_code_goes_here
<% end %>
剩余代码在这里
此表单将在ActivityController中提交,操作:随天创建
控制器将检查验证并保存它
看看链接是一个小应用程序,我用过类似的东西
哦,这实际上意味着旅行有很多天,而且资源有更多的筑巢,比如
days_path
day_path
new_day_path
new_day_activity_path
delete_day_activity_path
edit_day_activity_path
resources :trips
resources :days
resources :activities
end
end
因此,当您在local/trips/1/中时,实际上您在TripController中,请显示操作
如果不创建一个day Texhnical,则无法完成此操作。您可以为当天创建一个表单,在该表单中可以使用嵌套表单进行活动
最简单的方法是莱恩·贝茨的宝石
但要做到这一点,你必须首先将你的关系从habtm改为
class Day
has_many :activities
end
class Activity
belongs_to :day
end
然后,您将在trip show视图中添加一个day表单
<% nested_form_for [:trip, Day.new], :remote => true do |form| %>
<%= form.text_field :date %>
<%= form.fields_for :activities do |activity_form| %>
<%= activity_form.text_field :name %>
<%= activity_form.link_to_remove "Remove this activity" %>
<% end %>
<p><%= form.link_to_add "Add an activity", :tasks %></p>
<% end %>
true do | form |%>
表单现在向DaysController.create发出请求,其中包含行程的参数
以及活动和要求提供的服务
查看gem和我的应用程序我正在使用所有这些我希望它能有所帮助 这就是我最后要做的事情,它起作用了 在我的show.html.erb中为我的“旅行” show.html.erb
resources :trips do
resources :days
end
resources :days do
resources :activities
end
<div id="activity_form">
<h2>Activities</h2>
</div>
活动
链接到“编辑”一个活动。注意: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
“btn btn信息固定宽度btn”,方法::get,:remote=>true
\u form.html.erb此表单部分位于活动视图目录(../views/Activities/\u form.html.erb)下
true)do | f |%>
1 %>
edit.js.erb这是活动视图目录(../views/Activities/edit.js.erb)下的一个文件。表示获取ID为“activity\u form”的DOM元素并呈现部分“form”
$(“#活动形式”).html(“形式”)%>”;
update.js.erb我在编辑表单上点击update之后加入了这个javascript,以呈现活动列表的更新部分。这样我就不必重新加载页面来查看更新
$("#activities_list").html("<%= escape_javascript( render(:partial => "/trips/activities") ) %>");
$(“#活动列表”).html(“/trips/activities”))%>”;
routes.rb这是我嵌套路由的方式。按照最佳实践只执行1级
资源:旅行可以吗
资源:天
结束
资源:天做什么
资源:活动
结束谢谢,但我实际上是从课堂旅行秀视图开始的(localhost:3000/trips/1/),我想下去创建(或更新)一个活动(属于旅行的一天)。当我们处于“旅行”级别时,我如何传递“@Day”?我想点击一个链接,上面写着“为第5天添加活动”和“@Day”“Day#5,@activity=activity.new.是吗?但是如何呢?而且,它必须由AJAXI传递到分部中?假设这可以工作,但不希望使用gem。嵌套模型表单的更新Railscast是否适用于此处?我是否可以只更新Days模型以使用“accepts_nested_attributes_for:activities”.在本例中,跳闸“显示”的控制器动作是什么样子的?