简介:
我正在做一个汽车经销商项目.. 销售从 A 到 Z 的每个品牌的汽车。我想制作一个小盒子,其中包含每个汽车名称的链接。单击 Mercedes for ex,将渲染所有梅赛德斯汽车,依此类推。这是我现在拥有的:
在汽车 Controller
def mercedes
...
@cars = Car.where('carname_id = 1').order('created_at desc').paginate :page => params[:page], :per_page => 5
end
每辆车都有这样的代码,30 件..但还会有更多 在我看来
<%= link_to 'Mercedes', :controller => :cars, :action => :mercedes %>
还有大约 30 行代码,每辆车一行。除此之外,我必须有 30 个 View 文件。好吧,有了 View ,我想我可以对所有汽车使用一个部分
问题:
如何用更少的代码来完成。也许它会有所帮助..我有一个名为 carnames 的表,我把所有的车都放在那里,所以我冷做类似的事情
<% @carnames.each do |car| %>
<%= link_to '<%= carname.name %>', :controller => :cars, :action => :<%= carname.name %> %>
<% end %>
我认为这将为我生成每辆汽车的链接而无需编写它们,问题出在 Controller 中。我不确定是否可以编写这么多代码。我希望我说清楚。感谢您的宝贵时间。
编辑
我的车是这样存放的:
我将汽车名称保存在一个名为 carnames 的表中,在 carmodels 中保留模型。每个表都有一个 ID 字段和名称字段。所以 Meredes E class for ex 将具有来自 carname 表的具有特定 id_carname 的汽车名称和来自 carmodel 表的 E 类具有特定的 id_carmodel.. 我拥有所有模型的所有 belongs_to 和 has_many。
最佳答案
你遇到麻烦是因为你做错了。有一个名为“梅赛德斯”的 Controller Action 敲响了警钟。理想情况下,你有一个品牌模型/ Controller ,它有很多车。例如:
class BrandsController < ApplicationController
def show
@brand = Brand.find params[:id]
end
end
class CarsController < ApplicationController
def index
@brand = Brand.find params[:brand_id]
@cars = @brand.cars.paginate(:page => params[:page], :per_page => 5)
end
end
class Brand < ActiveRecord::Base
has_many :cars
# With this, your car URL could be /brands/1-mercedes/cars,
# instead of just /brands/1/cars.
def to_param
"#{self.id}-#{self.name}"
end
end
class Car < ActiveRecord::Base
belongs_to :brand
end
resources :brands do
resources :cars
end
<h1><%= @brand.name %></h1>
<% @cars.each do |car| %>
<%= link_to car.name, [@brand, car] %>
<% end %>
作为引用,您可以使用 carname.name.to_sym
,如下所示:
<% @cars.each do |car| %>
<%= link_to car.name, :controller => :cars, :action => car.name.to_sym %>
<% end %>
虽然传递 car
记录应该足够了:
<% @cars.each do |car| %>
<%= link_to car.name, car %>
<% end %>
但是,这并不能改变您正在编写糟糕的代码。
关于ruby-on-rails - 寻找一种更简单的方法来在 Rails 3 中呈现结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774274/