create_table "bank_cards", force: :cascade do |t|
t.string "number"
t.string "status"
t.string "bank_name"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "users", force: :cascade do |t|
t.string "name"
t.integer "age"
t.string "phone"
t.string "status"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
class User < ApplicationRecord
has_many :bank_cards
end
class BankCard < ApplicationRecord
belongs_to :user
end
以上图为例,我们在页面中需要进行如下操作:
<% @users.each do |user| %>
...
<td><%= user.bank_cards.name %></td>
...
<% end %>
当bank_cards没有数据,为nil时,页面报错。这里我们就可以用.try方法。可以改为:
<% @users.each do |user| %>
...
<td><%= user.bank_cards.try :name %></td>
...
<% end %>
之后,页面不会报错,该部分为空值nil,页面中不予显示。
风险提示:这样做会隐藏方法本身的错误,如此例中,bank_cards方法如果定义错误,也会被隐藏,页面会正常显示。
网友评论