我有一个带有管理员用户索引页面的网上商店来检查用户信息。在这个页面上,我现在想要显示送货地址(带名字,姓氏,街道......)。
我设法创建了这个帮助方法来获取firstname,使用user_id,user和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种不同辅助方法更好的方法......
我还尝试过&lt;%= customer(@ user.id).firstname%&gt;,但这会为nil:NilClass 提供错误 undefined method`lirstname'。< / p>
我的管理员:: CustomersController: schema.rb的一些相关部分:def index
@users = User.all
@shipping_addresses = ShippingAddress.all
end
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
答案 0 :(得分:1)
您说您的代码适用于显示一个客户字段,但我对此表示怀疑。
这里的代码非常令人困惑:
module Admin::CustomersHelper
def customer(user)
s = ShippingAddress.find_by(id: user)
if s
s.firstname
end
end
end
几点:
方法名称表明它返回Customer
或类似模型的实例。但它返回一个字符串OR nil(在个案中)。
方法接受名称 user 下的参数,假设该参数是User
类的实例。但实际上它是一个ID。
您正在查询id
字段。我认为它应该在user_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 %>