Ruby on rails 如何显示来自另一个模型的(多个)参数

Ruby on rails 如何显示来自另一个模型的(多个)参数,ruby-on-rails,ruby,methods,helper,Ruby On Rails,Ruby,Methods,Helper,我有一个webshop,其中有一个管理员用户InExpage来检查用户信息。在这一页上,我现在想用名字、姓氏、街道……显示发货地址 我已经设法创建了这个helper方法,通过使用user\u id来获取firstname,user和shipping\u地址都有: module Admin::CustomersHelper def customer(user) s = ShippingAddress.find_by(id: user) if s s.firstname end

我有一个webshop,其中有一个管理员用户InExpage来检查用户信息。在这一页上,我现在想用名字、姓氏、街道……显示发货地址

我已经设法创建了这个helper方法,通过使用user\u id来获取firstname,user和shipping\u地址都有:

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

<%= customer(@user.id) %>
my 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
几点:

方法名表示它返回Customer或类似模型的实例。但在某些情况下,它会返回字符串或nil

方法接受名为user的参数,假定该参数是user类的实例。但实际上它是一个ID

您正在查询id字段。我想应该在用户id上

我不会从该方法返回特定字段,而是返回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 %>

使用关联,@user.shipping\u地址。attribute@user.shipping_address仅在定义关联时有效。无需在问题标题前添加已解决的文本。因此,可以检测已回答的问题本身:那正是我要找的!关于helper方法的要点。我知道这是一个混乱的局面,我是Rails新手,正确命名东西肯定是我需要努力的事情。顺便说一句,你是对的。巧合的是,有一个与用户id相同的发货地址,但这两个地址不属于同一个用户。。。
<% shipping_address = shipping_address_for(@user) %>
<% if shipping_address %>
  <%= shipping_address.firstname %>
  <%= shipping_address.lastname %>
  ...
<% end %>