[英]RoR Associations not working
我正在尝试制作RoR项目,目前与模型协会有关。 这可能是由错误或误解引起的,但是在过去的两天内,我一直找不到该错误或误解。
我希望协会像这样工作:
User
=> gapiToken
=> userSession
因此,从技术上讲,我可以仅调用User.find(foo).gapiToken
。
目前我已经设置好了
User
has_many :userSessions
has_one :gapiToken
UserSession
belongs_to :user
GapiToken
belongs_to :user
但是由于某种原因,这无法正常工作。
例如,这段代码:
@user = User.create(gid: foo, permissions: bar)
@gapiToken = @user.gapiToken.create(access_token: foo, token_type: bar, expires_on: bazz, refresh_token: bop)
#^ Error ^ "undefined method `create' for nil:NilClass"
我在使用或设置中是否都犯了这个错误?
首先,请务必遵循约定。 使用under_scores,而不是camelCase:
User
has_many :user_sessions
has_one :gapi_token
其次,方法@model_instance.association.create
适用one-to-many
关联,而不是one-to-one
关联。 它应该是:
@user.create_gapi_token(...)
有关关联API的更多信息,请参见此处 。
不要忘记索引。
基本的经验法则:索引外键,并在连接表上索引两个键。 例:
create_table :user_sessions do |t|
t.belongs_to :user # will result in t.integer :user_id
end
add_index :user_sessions, :user_id
create_table :gapi_tokens, id: false do |t|
t.belongs_to :user
end
add_index :gapi_tokens, :user_id
联接表上的索引示例(注释id: false
和unique: true
):
create_table :users_favourites, id: false do |t|
t.belongs_to :user
t.belongs_to :favourite
end
add_index :users_favourites, [:user_id, :favourite_id], unique: true
重要的是要了解这些约定,以免以后再摔倒。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.