通过自己和ActiveRelations查看对象

时间:2014-05-23 04:40:10

标签: ruby-on-rails ruby-on-rails-4

假设我有三个模型:CarManufacturerManufacturerCar

CarManufacturer通过ManufacturerCar与has_many关系相连。用户可以访问各个车页以查看有关这些车辆的信息,也可以访问制造商。

这就是扭曲:在每个制造商的页面上,我还有一个列表,显示该制造商生产的所有汽车。这些项目来自ManufacturerCar ActiveRelation。我试图做的是允许用户浏览下一个'和之前的'在汽车页面上,但仅当用户从制造商页面到达该页面时才会显示。

例如,如果用户直接进入Honda Civic页面,则不要显示next / prev按钮(因为它们在该上下文中没有意义)。但如果他们首先去本田制造商页面,然后点击本田思域,那么我还需要允许他们从本田思域页面转到本田雅阁,本田CR-V等(即无需返回本田制造商页面首先)。

如何在Rails中完成?

1 个答案:

答案 0 :(得分:1)

Danny之外,nested resources也是我最初的想法:

#config/routes.rb
resources :cars
resources :manufacturers do
   resources :cars #-> /manufacturers/3/cars
end

-

这将允许您创建两组视图(或actions,具体取决于您希望如何构建控制器):

#app/views/cars/index.html.erb
# ... stuff here
<% if @manufacturer.present? %>
   <%= render partial: "manufacturers/cars", locals: { manufacturer: @manufacturer } %>
<% end %>


#app/views/manufacturers/show.html.erb
<%= render partial: "cars", locals: { manufacturer: @manufacturer } %>


#app/views/manufacturers/_cars.html.erb
<% for car in manufacturer.cars do %>
      <%= car.name %>
<% end %>