如何显示另一个模型的(多个)参数
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
几点:
方法名称表明它 return 是 Customer
或类似模型的实例。但它是 returning 字符串或 nil(在某些情况下)。
方法接受名称为 user 的参数,人们会认为它是 User
class 的一个实例。但实际上是一个ID。
您正在查询 id
字段。我认为它应该在 user_id
.
我不会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 %>
我有一个带有管理用户索引页的网上商店,用于检查用户信息。在此页面上,我现在想显示送货地址(包括名字、姓氏、街道...)。
我已经成功地创建了这个帮助方法来获取名字,方法是使用 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
几点:
方法名称表明它 return 是
Customer
或类似模型的实例。但它是 returning 字符串或 nil(在某些情况下)。方法接受名称为 user 的参数,人们会认为它是
User
class 的一个实例。但实际上是一个ID。您正在查询
id
字段。我认为它应该在user_id
.我不会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 %>