Ruby on rails 如何在Rails中设置模型继承?I';我们有一个类和两个子类
假设我正在创建一个包含特定类型帖子的博客 我有一个模型叫做项目。一个项目有一个名称(字符串)和一个指向某个源或某物的链接(字符串)。一个项目有多个标记(标记只是存储在自己数据库中的字符串) 我想将项目扩展为两种不同的模型:Quote和Link 报价是附加了某些内容(文本)的项目 链接与项目几乎相同 文本和链接都需要有来自Item类的名称和链接,但是Quote有一个额外的字段(内容:text)。我只给Link一个子类,因为它不应该被认为是Quote的超类 我希望能够在自己的页面上显示链接和引用,并以不同的方式呈现它们。我还希望能够列出头版上的所有项目,并以不同的方式呈现它们(引用需要显示其内容)Ruby on rails 如何在Rails中设置模型继承?I';我们有一个类和两个子类,ruby-on-rails,ruby,inheritance,activerecord,Ruby On Rails,Ruby,Inheritance,Activerecord,假设我正在创建一个包含特定类型帖子的博客 我有一个模型叫做项目。一个项目有一个名称(字符串)和一个指向某个源或某物的链接(字符串)。一个项目有多个标记(标记只是存储在自己数据库中的字符串) 我想将项目扩展为两种不同的模型:Quote和Link 报价是附加了某些内容(文本)的项目 链接与项目几乎相同 文本和链接都需要有来自Item类的名称和链接,但是Quote有一个额外的字段(内容:text)。我只给Link一个子类,因为它不应该被认为是Quote的超类 我希望能够在自己的页面上显示链接和引用,并
有人能帮忙吗?这是一个相当简单的ActiveRecord继承案例,STI(单表继承)应该可以很好地满足您的需要 您真正需要做的就是确保您的
items
表具有所有必要的字段来覆盖其子体的每个属性,以及一个类型(字符串)字段,ActiveRecord在内部使用该字段来跟踪每个记录的类
在本例中,似乎需要将内容(文本)字段和类型(字符串)字段添加到数据库中的items
表中
一旦有了正确的字段,就可以继续并将项子类化了
:
class Quote < Item
...
end
上面将为link
记录呈现app/views/links/_-link.html.haml
,为quote
记录呈现app/views/quotes/_-quote.html.haml
这将使实现您描述的功能变得非常容易 只是一个警告:使用ActiveRecord继承可能会令人沮丧,一个不那么抽象的例子会很有帮助。你是如何将Foo和Bar与Frob联系起来的?通过单表继承?@MarcTalbot我让它变得不那么抽象,希望能有所帮助。到目前为止,这似乎是可行的!我为Link和Quote添加了控制器,这些控制器只存在于从ItemsController继承的地方,并将这两种类型作为资源添加到我的config/routes.rb中。我使用视图文件夹特定的部分来呈现每个部分的表单。我在我的models/item.rb中的所有公共字段上使用了:attr_accessible,在models/quote.rb中的:content上使用了:attr_accessible。但是,当我尝试创建新报价时,我遇到了一个错误:
无法批量分配受保护的属性:content
。有什么建议吗?很有趣。你所做的似乎很正确,但老实说,我在我自己的应用程序中对attr\u accessible
没有那么具体。我总是只列出父类中任何子类所需的所有属性。它确实感觉有点懒,但我想不出在什么情况下它会引起任何问题。我会再次检查您是否保存了所有内容,重新启动服务器,然后查看问题是否自行解决。如果它确实不起作用,我就把它添加到父类中,然后继续。
# items/index.html.haml
- @items.each do |item|
= render item