【问题标题】:How to show (multiple) params from another model如何显示来自另一个模型的(多个)参数
【发布时间】:2018-10-13 18:09:28
【问题描述】:

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

我已经设法创建了这个帮助方法来获取名字,方法是使用 user_id,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 个不同的辅助方法更好的方法...

我也尝试过 ,但这会产生错误undefined method `firstname' for nil:NilClass


我的管理员::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

【问题讨论】:

  • 使用关联,@user.shipping_address.attribute
  • @user.shipping_address 仅在定义了关联时才有效。
  • 无需在问题标题前添加文本“SOLVED”。 SO 检测已回答的问题本身。 :)

标签: ruby-on-rails ruby methods helper


【解决方案1】:

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

你的代码很混乱:

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

几点:

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

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

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

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

【讨论】:

  • 这正是我想要的!辅助方法的要点。我知道这是一团糟,我是 Rails 的新手,正确命名绝对是我需要努力的事情。顺便说一句,你是对的。巧合的是有一个收货地址和user_id同一个id,但是两者不属于同一个用户...
猜你喜欢
  • 1970-01-01
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多