【问题标题】:looking for a easier way to render results in rails 3寻找一种更简单的方法在 rails 3 中呈现结果
【发布时间】:2011-10-14 22:34:39
【问题描述】:

简介:

我正在从事汽车经销商项目.. 销售从 A 到 Z 的每个品牌的汽车。我想为每个车名制作带有链接的小盒子。单击 Mercedes for ex,将为所有汽车渲染所有梅赛德斯汽车,依此类推。这是我现在拥有的:

汽车控制器

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

我认为这将为我生成每辆车的链接,而无需编写它们,它们的问题在于控制器。我不确定是否可以编写这么多代码。我希望我说清楚。感谢您的宝贵时间。

编辑

这是我的汽车的存放方式:

我将汽车名称保存在一个名为 carnames 的表中,并在 carmodels 中保存模型。每个表都有一个 ID 字段和名称字段。因此,用于 ex 的 Meredes E 类将具有来自汽车名称表的汽车名称,具有特定的 id_carname 和来自汽车模型表的 E 类具有特定的 id_carmodel.. 我为所有模型设置了所有 belongs_to 和 has_many。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    你遇到麻烦是因为你做错了。有一个称为“梅赛德斯”的控制器动作会敲响警钟。理想情况下,您应该有一个 Brand 模型/控制器,其中包含许多汽车。例如:

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

    但这并不能改变您正在编写糟糕的代码。

    【讨论】:

    • 好吧,我确信还有另一种更好的方法。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 2023-03-23
    • 2020-11-24
    • 2016-10-05
    • 1970-01-01
    • 2013-03-23
    相关资源
    最近更新 更多