加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails有很多关联

发布时间:2020-12-17 02:18:30 所属栏目:百科 来源:网络整理
导读:我有几个问题让我烦恼,需要回答.一切都与以下教程 Two Many-to-Many有关 问题1 使用has_many的连接表是否需要具有id?或者删除id的最佳做法?并添加一个索引并使用另外两个主键并将其设置为唯一且一起? 问题2 如何在创建表的迁移中完成? 问题3 在做完这些
我有几个问题让我烦恼,需要回答.一切都与以下教程 Two Many-to-Many有关

问题1

使用has_many的连接表是否需要具有id?或者删除id的最佳做法?并添加一个索引并使用另外两个主键并将其设置为唯一且一起?

问题2

如何在创建表的迁移中完成?

问题3

在做完这些关系模型并更新数据之后.我想在每次更新时创建一组新数据(以保存数据).控制器如何看待更新,新的创建模型?

问题4

在中间表中,我想设置属性,如有一个可见的true或false,我怎样才能设置不仅仅是第三个表而且还有第二个表参数

解决方法

首先……谨慎一点:轨道广播非常古老.在那一集中可能存在语法上的东西,这些东西已经被新版本的rails赋予了日期.

问题1

如果您正在使用has_many through方法,则必须在连接模型中具有id列,因为您使用的是完整的模型.正如Ryan在剧集中提到的那样,如果您需要跟踪其他信息,您将选择此方法.如果使用has_and_belongs_to_many方法,则表中不会有id列.

如果你想要在你的多对多关联中不允许复制的检查(即允许将项目a与项目b配对并再次允许项目a到项目b的另一个记录),你可以使用一个简单的使用范围验证行:

validates_uniqueness_of :model_a_id,:scope => [:model_b_id]

问题2

您可以使用此代码在迁移中添加索引

add_index :table_name,[ :join_a_id,:join_b_id ],:unique => true,:name => 'by_a_and_b'

这将被插入到create_table语句下面的更改块中(但不会插入到create_table块中).查看此问题以获取更多详细信息:In a join table,what’s the best workaround for Rails’ absence of a composite key?

问题3

我并不完全清楚你想要完成什么,但是如果你想在每次将新记录插入连接模型时采取一些动作,我会使用after_create活动记录钩子.这看起来像这样.

class YourJoinModel < ActiveRecord::Base

  after_create :do_something

  def do_something
    puts "hello world"
  end
end

每次创建新记录时都会调用该函数do_something.

问题4

使用has_many through方法可以访问您在关系两侧的模型中定义的其他属性.例如,如果您有此设置:

class Factory < ActiveRecord::Base
  has_many :widgets,:through => :showcases
end

class Widget < ActiveRecord::Base
  has_many :factories,:through => :showcases
end

class Showcases < ActiveRecord::Base
  belongs_to :factory
  belongs_to :widget

  attr_accessiable :factory_id,:widget_id,:visible
end

你可以这么说

widget = Widget.first
shown = widget.showcases
shown.first.visible

要么

shown = widget.showcases.where( :visible=> true )

您还可以访问其他协会:

shown.first.factory

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读