如何显示另一个模型的(多个)参数

How to show (multiple) params from another model

我有一个带有管理用户索引页的网上商店,用于检查用户信息。在此页面上,我现在想显示送货地址(包括名字、姓氏、街道...)。

我已经成功地创建了这个帮助方法来获取名字,方法是使用 user_id,用户和 shipping_address 都有:

module Admin::CustomersHelper
 def customer(user)
  s = ShippingAddress.find_by(id: user)
  if s
   s.firstname
  end
 end
end

在我看来我有:

<%= customer(@user.id) %>

这可行,但问题是我需要显示 10 多个不同的参数,并且必须有比制作 10 个不同的辅助方法更好的方法...

我也尝试过 <%= customer(@user.id).firstname %>,但这给出了错误 undefined method `firstname' for nil:NilClass .


我的Admin::CustomersController:

def index
 @users = User.all
 @shipping_addresses = ShippingAddress.all
end

我的schema.rb的一些相关部分:

create_table "shipping_addresses", force: :cascade do |t|
 t.string "firstname"
 t.string "lastname"
 t.string "street"
 ...etc
 t.bigint "user_id"
 t.index ["user_id"], name: "index_shipping_addresses_on_user_id"
 ..etc
 add_foreign_key "invoice_addresses", "users"
 add_foreign_key "order_items", "orders"
 add_foreign_key "order_items", "products"
 add_foreign_key "orders", "order_statuses"
 add_foreign_key "orders", "users"
 add_foreign_key "shipping_addresses", "users"
end

你说你的代码适用于显示一个客户领域,但我对此表示怀疑。

你这里的代码很混乱:

module Admin::CustomersHelper
  def customer(user)
    s = ShippingAddress.find_by(id: user)
    if s
      s.firstname
    end
  end
end

几点:

  1. 方法名称表明它 return 是 Customer 或类似模型的实例。但它是 returning 字符串或 nil(在某些情况下)。

  2. 方法接受名称为 user 的参数,人们会认为它是 User class 的一个实例。但实际上是一个ID。

  3. 您正在查询 id 字段。我认为它应该在 user_id.

  4. 我不会return方法中的特定字段,而是ShippingAddress的实例。这样,我就不必调用多个方法来显示多个字段。

因此,更新后的代码将是这样的:

module Admin::CustomersHelper
  def shipping_address_for(user_id)
    ShippingAddress.find_by(user_id: user_id)
  end
end

在浏览量中,

<% shipping_address = shipping_address_for(@user) %>
<% if shipping_address %>
  <%= shipping_address.firstname %>
  <%= shipping_address.lastname %>
  ...
<% end %>