【问题标题】:how to achieve foreign key concepts in rails using association?(new to rails)如何使用关联在 Rails 中实现外键概念?(Rails 新手)
【发布时间】:2015-06-06 12:57:05
【问题描述】:


我在我的 Rails 项目中遇到了实现外键概念的麻烦,我浏览了http://guides.rubyonrails.org/association_basics.html 和一些教程,并开始知道这可以通过 association 来实现,并且我尝试过使用相同的方法但尚未成功。
实际上我是 Rails 的新手,我继续走同样的路。非常感谢任何指导...
根据我的情况,我有两个模型 UserRegion
User 模型中有三个字段 user_id、user_name、user_region_id(外键)
Region 模型 => region_id(primary key), region name

我想在用户
的索引页面上显示user_id user_name region_name(使用外键) 那么如何实现呢?请帮帮我
您的帮助将不胜感激
提前感谢您的帮助

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    按照惯例,您不应该在列名前加上user_region_,因为它们已经存在于这样命名的表中。删除前缀,您可以在模型中使用以下代码实现您想要的结果:

    class User < ActiveRecord::Base
      belongs_to :region
    end
    
    class Region < ActiveRecord::Base
      has_many :users
    end
    

    【讨论】:

      【解决方案2】:

      我认为在 Rails 中记住关联的最简单方法是具有外键的模型应该具有 belongs_to 声明。因此,在您的设置中,由于 Region 有很多用户,因此在 users 表中包含外键是有意义的。

      假设 users 表中的外键名为region_id,则应在 User 模型中声明如下关联。

      class User < ActiveRecord::Base
        belongs_to :region
      end
      

      之所以可行,是因为 rails 假定外键位于名为 region_id 的列下。 AND主键位于区域表中名为id 的列下。

      在关联方面,您可以决定它是has_one 还是has_many。既然已经决定它应该是has_many,那么只需在 Region 模型中声明该关联就很简单了

      class Region < ActiveRecord::Base
        has_many :users
      end
      

      如果您想继续使用region_id 作为区域表的主键,请将用户模型中的关联更改为

      class User < ActiveRecord::Base
        belongs_to :region, primary_key: :region_id
      end
      

      AND确保在区域模型中声明它,以便执行region.users 将起作用

      class Region < ActiveRecord::Base
        self.primary_key = 'region_id'
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-20
        • 2015-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多