2011-10-14 43 views
1

簡介:尋找呈現在軌道3結果一個更簡單的方法

我工作的一個汽車經銷商項目..每賣出品牌的汽車從A到Z,我想,以與小盒子每個車名的鏈接。點擊奔馳前,將爲所有車輛提供所有梅賽德斯車等。以下是我現在所擁有的:

汽車控制器

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個文件..好,可欣賞我想我可以用一個部分爲所有汽車

問題:

這又如何在更少的代碼來完成。並可能會幫助..我有一個表命名carnames,我把所有的車,所以我冷做類似

<% @carnames.each do |car| %> 
<%= link_to '<%= carname.name %>', :controller => :cars, :action => :<%= carname.name %> %> 
<% end %> 

,我認爲這將生成鏈接到每個汽車對我來說withous寫他們,他們是在控制器中的問題..我不知道是否可以寫這個數量的代碼。我希望我能說清楚。謝謝你的時間。

編輯

這裏是我的車是如何存儲:

我一直在一個表叫carnames carnames和模型carmodels ..每個表有一個ID字段和姓名字段..所以Meredes E類爲前將具有特定的id_carname和carmodel表與特定的id_carmodel的具體id_carname和E類的carname ..我擁有所有模型的所有belongs_to和has_many。

回答

4

你有麻煩,因爲你做錯了。有一個名爲「梅賽德斯」的控制器行動響起了警鐘。理想情況下,你會有一個品牌模型/控制器,其has_many汽車。例如:

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 %> 

儘管如此,這並不改變你寫錯誤的代碼。

+0

好的,我確定還有另一種更好的方法來做到這一點。謝謝。 – rmagnum2002

相關問題