我有以下关系
Foo
has_many Bar
然后我有Foo
模型,但Bar
只是一个String
id
。
我可以创建仅包含Bar
的{{1}}模型,但我想知道是否可行以及如何使String id
查询所有Foo
并将其存储为Bars
{1}}模型中的{1}}。
如果我必须使用SQL,那很好。
另一个替代方法是删除list
表,然后将其作为字段放在Foo
表中,但是这需要序列化并且很难并且使SQL搜索效率低下。
架构是以下
Bar
has_many Foo
和
Foo
has_many Foo_Bars
不是Bar
has_and_belongs_to_many Bar_Foos
的原因是因为单个Foo
或单个Bar
的添加信息将是一个永无止境的链,认为这是像Foo
和Bar
这样的二分图是一个不相交的集合。
数据库与另一个应用程序共享,我使用rails作为可视界面来管理数据。
我的问题是我真的需要一个Foo
模型吗?
答案 0 :(得分:2)
听起来你必须要创建一个酒吧模型。 Rails默认主id是整数,而不是字符串。你似乎想要列出'belongs_to'Foo的所有酒吧。所以你的迁移将如下所示:
rails g model bar foo_id:integer
现在位于/models/bar.rb:
class Bar < ActiveRecord::Base
belongs_to :foo
end
你的模特/ foo.rb:
class Foo < ActiveRecord::Base
has_many :bars
end
使用foo foreign ID创建一些条形记录,现在您可以通过以下方式查询属于foo的所有条形图:
foo = Foo.find id
foo.bars
或来自Bar:
Bar.where(:foo_id => id)
阅读并练习: http://guides.rubyonrails.org/active_record_querying.html
答案 1 :(得分:1)
你可以在Foo模型中使用这种方法
class Foo < ActiveRecord::Base
serialize :barlist
...
def store_barlist
update_attributes(:barlist => self.bars.map {|bar| bar.string_id })
end
end
要在控制器中调用它,你必须做这样的事情。
def some_controller_action
@foo = Foo.find(1)
@foo.store_barlist
end