我对rails非常陌生,我对视图有一些问题...
我有这三个模型:预订,路线和的停止即可。
当您预订时,您必须选择路线和出发/到达城市。
EDIT
10
我不知道是否可能,但我希望能够选择我所选择的路线中的出发/到达城市。任何想法如何做到这一点?
谢谢!
下面是我预订表格的一部分:
class Route < ActiveRecord::Base
has_many :stops, :dependent => :destroy
has_many :reservations, :dependent => :destroy
belongs_to :train
end.
class Stop < ActiveRecord::Base
belongs_to :route
has_many :reservation_deps, class_name: "Reservation", foreign_key: "dep_city_id"
has_many :reservation_arrs, class_name: "Reservation", foreign_key: "arr_city_id"
end
class Reservation < ActiveRecord::Base
belongs_to :user
belongs_to :route
belongs_to :arr_city, class_name: "Stop",foreign_key: "arr_city_id"
belongs_to :dep_city, class_name: "Stop",foreign_key: "dep_city_id"
end
答案 0 :(得分:0)
您的停靠点应通过has_and_belongs_to或has_many:通过关系权限链接到您的路线,因为路线可以包含多个停靠点,并且停靠点可以属于许多路线。因此,假设您在预订页面上加载了路线,您应该能够执行以下操作
<%= f.collection_select :dep_city_id, @route.stops.all, :id, :name %>
<%= f.collection_select :arr_city_id, @route.stops.all, :id, :name %>
或类似
编辑:即使停止路线的路线是一对多,这也会有效。
<%= f.collection_select :dep_city_id, Stop.for_route(params[:route_id]), :id, :name %>
编辑2:
在这种情况下,您可以在Stop模型中添加一个for_route范围,这只是一个
scope for_route -> (route_id) { where(:route_id => params[:route_id]) }
在基本情况下,您将拥有一个包含路线的页面,您选择路线(链接或其他内容),然后转到您可以预订的页面。第一页会有这样的东西
<% @routes.each do |route| %>
<%= link_to route.name, new_reservation_path(:route_id => route.id) %>
<% end %>
上面代码生成的链接应链接到/ reservation?route_id = XXX
之类的内容当运行reservations_controller #new时,你知道路由ID是什么,所以你可以用@route = Route.find(params [:route_id])
加载它。然后,在渲染页面时,您将能够使用我在第一个示例代码中指定的f.collection_select帮助程序。
在最后一种情况下,你不知道用户在预订页面上选择了哪条路线之前会选择哪条路线,它会变得更复杂,你必须开始使用JS来查询路线的停靠点列表每次选择新路线时。