Ruby on rails 参照查找
所以我有两个模型:Ruby on rails 参照查找,ruby-on-rails,Ruby On Rails,所以我有两个模型: create_table "holders", :force => true do |t| t.string "faceid" t.integer "badges_id" t.datetime "created_at", :null => false t.datetime "updated_at", :null => false end add_index "holders", ["badges_id"], :name => "index
create_table "holders", :force => true do |t|
t.string "faceid"
t.integer "badges_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
add_index "holders", ["badges_id"], :name => "index_holders_on_badges_id"
create_table "badges", :force => true do |t|
t.string "name"
t.text "description"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
我需要两样东西:
我知道这是一个很难回答的问题,但直到现在我还没有研究过参考资料,所以从文献中我不太了解如何建立连接。如果是Ruby on Rails,你必须有两种型号:
class Holder < ActiveRecord:Base
has_many :badges
end
class Badge < ActiveRecord:Base
belongs_to :holder
end
及
如果您的
徽章
可以属于多个持有者,那么您必须编写一个has_和_belies_to_many
关系。您的持有者和徽章模型实际上需要多对多关联。因此,您必须选择使用has many:through
或使用has\u和\u beliens\u to \u many
。两者之间的差异可以找到。我举的例子是有很多:通过
您需要创建三个模型
class Holder < ActiveRecord:Base
has_many :badges_holders
has_many :badges, :through => :badges_holders
end
class Badge < ActiveRecord:Base
has_many :badges_holders
has_many :holders, :through => :badges_holders
end
class BadgesHolder < ActiveRecord:Base
belongs :badge
belongs :holder
end
现在你可以很容易地使用Holder.find by_faceid('xyz')。徽章查找面为xyz的持有者持有的所有对冲。和Badge.first.holders
以获取第一个床位的所有持有者
对于您的问题,HABTM将是一个很好的选择,因为您不需要联接表中的任何额外字段,因此您可以在两种型号中使用has\u和\u-belish\u-many
,在这种情况下,您不需要BadgesHolder
model。对于连接表的迁移,将第一行替换为create_table“badges_holders”,:id=>false,:force=>true do | t |
a并删除t。时间戳
,因为HABTM的连接表不应该有外键以外的任何列。谢谢@forghtnerform。我的模型已经设置好了,里面有数据。我是否可以在正确的模型文件中添加has many and belowns_to行,并在重新启动服务器后将其连接?不幸的是,不是。两个表中都需要有引用。现在在db中设置的方式很容易在徽章和持有人之间进行1对N操作(例如,每个徽章可能有多个持有人,但每个持有人最多有一个徽章),但您需要N对N,因此您需要第三个表来实现徽章持有人关系。不要惊慌,在不删除您的数据的情况下仍然可以,但是添加has_和_besign_to_many
不会起作用。您的数据库中是否已经存在徽章和持有者之间的关系,即是否存在徽章id不为空的持有者?根据这一点,我可以提出不同的迁移:选项1-保留现有的引用,选项2-不关心这一点,因为没有引用。
Badge.find(1337).holder
class Holder < ActiveRecord:Base
has_many :badges_holders
has_many :badges, :through => :badges_holders
end
class Badge < ActiveRecord:Base
has_many :badges_holders
has_many :holders, :through => :badges_holders
end
class BadgesHolder < ActiveRecord:Base
belongs :badge
belongs :holder
end
create_table "holders", :force => true do |t|
t.string "faceid"
t.timestamps
end
add_index "holders", ["badges_id"], :name => "index_holders_on_badges_id"
create_table "badges", :force => true do |t|
t.string "name"
t.text "description"
t.timestamps
end
create_table "badges_holders", :force => true do |t|
t.integer "holder_id"
t.integer "badge_id"
t.timestamps
end