這可能意味着您沒有user_name
存在於關聯用戶字段中,但如果它完全缺失,它通常會拋出異常。
我想說的記錄是空白或 NULL 在分貝,因此它沒有任何實際價值,當你將它輸出。
解決問題的方法是確保將值存儲在數據庫中。 Rails有validations
爲了這個目的:
#app/models/user.rb
class User < ActiveRecord::Base
validates :user_name, presence: true
end
這將每次解僱你create
或update
用戶記錄,這意味着當你在你的意見發送PARAMS像...
#<User id: 1, user_name: nil, full_name: nil, email: "[email protected]", password_digest: "$2a$10$wLxvI3RYjjIY2lmga0irU.Rlf0pwCM6/HlsgbI10eb1...", role: nil, created_at: "2015-12-25 09:39:37", updated_at: "2015-12-25 09:39:37">
.. 。它會返回一個錯誤,您不能創建該記錄,因爲user_name
不存在。
在這樣的情況下,我們使用的方法來回落到電子郵件,如果name
不存在:
#app/models/user.rb
class User < ActiveRecord::Base
def user_name
self[:user_name] || email
end
end
這使您可以撥打@user.name
,如果他們沒有它,它取而代之的是email
。
這樣,如果您驗證電子郵件存在,您將可以始終返回一個值。
-
另一個很酷的技巧是delegate
,避免了law of demeter
(IE只有調用屬性時,一個點):
#app/models/post.rb
class Post < ActiveRecord::Base
delegate :user_name, to: :user
end
這將允許您撥打:
<%= post.user_name %>
...它調用User
模型的user_name
屬性。
'user_name'場可能不會當你註冊時填寫的USER_NAME字段包含值 –
它含有雖然 –
和user_name是存儲在數據庫中 –