Rails 4:从订单数据中获取客户名称

时间:2016-01-18 15:00:19

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

我有两个模型,订单和客户:

  create_table "orders", force: :cascade do |t|
    t.integer  "customer_id", limit: 4
    t.decimal  "subtotal",                precision: 10
    t.decimal  "tax",                     precision: 10
    t.decimal  "total",                   precision: 10
    t.datetime "created_at",                             null: false
    t.datetime "updated_at",                             null: false
  end

  create_table "customers", force: :cascade do |t|
    t.string   "name",       limit: 255
    t.string   "email",      limit: 255
    t.datetime "created_at",             null: false
    t.datetime "updated_at",             null: false
  end

我列出了所有订单,但希望在html表中包含客户名称,而不是客户ID。

我的订单控制器索引方法是:

def index
  @orders = Order.all.order('id DESC')
end

如何在每个订单的索引方法中包含客户名称?

1 个答案:

答案 0 :(得分:1)

您需要在客户和订单类之间设置relationship。正如您在订单表中添加了customer_id列,我可以假设客户可以有多个订单,或者换句话说,可能有许多不同的订单可能由同一客户订购(除非您想要限制)。因此,您将has_many关联添加到Customer模型。

<强> Customer.rb:

class Customer < ActiveRecord::Base
  has_many :orders
end

随后,订单属于客户,因此我们添加相应的belongs_to关联。

<强> Order.rb:

class Order < ActiveRecord::Base
  belongs_to :customer
end

HTML表格中添加以下单元格:

<td><%= order.customer.name %></td>