繁体   English   中英

RoR协会不起作用

[英]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: falseunique: 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

阅读有关迁移的信息 ,然后阅读并重新阅读Rails指南

重要的是要了解这些约定,以免以后再摔倒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM