Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord有很多,属于外键的实现_Ruby On Rails - Fatal编程技术网

Ruby on rails ActiveRecord有很多,属于外键的实现

Ruby on rails ActiveRecord有很多,属于外键的实现,ruby-on-rails,Ruby On Rails,我试图理解has中输入选项hash的语法/动机,hash有很多并且属于关联。(下面的问题) 假设我有两个表,用户和帖子。 一个用户有许多帖子,而一篇帖子属于一个用户。据我所知,人们会建立这样的协会: (在用户模型中) (后模式) 我的问题如下: 我怎样才能直观地理解为什么这些函数属于并且有许多函数是以这种方式实现的?i、 e.在更改定义的关联时,为什么不希望外键发生更改?因为,天真地说,我希望使用不同的外键定义关联,这取决于您的查询来自哪个表(即class_name表)。这仅仅是一个惯例问题吗

我试图理解has中输入选项hash的语法/动机,hash有很多并且属于关联。(下面的问题)

假设我有两个表,用户和帖子。 一个用户有许多帖子,而一篇帖子属于一个用户。据我所知,人们会建立这样的协会:

(在用户模型中)

(后模式)

我的问题如下: 我怎样才能直观地理解为什么这些函数属于并且有许多函数是以这种方式实现的?i、 e.在更改定义的关联时,为什么不希望外键发生更改?因为,天真地说,我希望使用不同的外键定义关联,这取决于您的查询来自哪个表(即class_name表)。这仅仅是一个惯例问题吗

我已经看了很多/属于的文档,我想我理解它们是如何实现的,但我仍然不理解/为什么/它是这样实现的。我觉得维护一个恒定的外键(独立于您查询的表)会混淆SQL级别上发生的事情。(但我希望我只是错过了一些愚蠢的事情)

编辑: 为清楚起见,这是我天真地认为更有意义的协会:

在用户模型中

后置模型


呵呵,我在发布我的问题后不久就意识到了(这绝对是愚蠢的): 我认为primary/foreign分别表示查询哪个表和连接哪个表。实际上,我应该把它看作是数据库中真正的主键和外键。我怀疑这对任何人都会有帮助,但我会把它放在一边以防万一,因为它让我头痛(即使它可能不应该有)

has_many(:posts,
    primary_key: :id,
    foreign_key: :user_id, #this makes me think SQL is querying
                           #User.user_id, an invalid field
    class_name: "Post")
belongs_to(:user,
    primary_key: :id,
    foreign_key: :user_id, 
    class_name: "User")
has_many(:posts,
    primary_key: :user_id, #because querying post table so treat this column
                          #as a primary key

    foreign_key: :id,      #because users is the 'secondary' table,  
                          #:id should be foreign
    class_name: "Post"
)
belongs_to(:user,
    primary_key: :id, #because querying User table, treat this as the
                     #primary key

    foreign_key: :user_id,  #because posts is the 'secondary' table we are 
                            #comparing to, :user_id should be foreign
    class_name: "User")