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

ruby-on-rails – 使用belongs_to进行Rails对象继承

发布时间:2020-12-17 03:11:59 所属栏目:百科 来源:网络整理
导读:我在Report和Chart之间有一个简单的has_many / belongs_to关系.我遇到的问题是我的图表模型是有孩子的父母. 所以在我的报告模型中我有 class Report ActiveRecord::Base has_many :chartsend 我的图表模型是父模型,其中Pie,Line,Bar都继承自Chart.我不确定be
我在Report和Chart之间有一个简单的has_many / belongs_to关系.我遇到的问题是我的图表模型是有孩子的父母.

所以在我的报告模型中我有

class Report < ActiveRecord::Base
  has_many :charts
end

我的图表模型是父模型,其中Pie,Line,Bar都继承自Chart.我不确定belongs_to:报告在图表模型中的位置,或图表模型的子项.我尝试访问chart.report时遇到错误,因为该对象的类型为“Class”

undefined local variable or method `report’ for #< Class:0x104974b90>

图表模型使用STI,因此它从图表表格中的chart_type列中拉出“性别”..我缺少什么?

编辑

Chart
      /  
    Pie  Line
    / 
   /   
Gender Sex

我(使用STI)实例化一个Gender或Sex类型的对象.希望这会有所帮助.

我有一种感觉,它的原因

@chart.update_attributes(params[:chart])

因为当提交它的实际参数[:chart]其params [:gender]或params [:sex]

解决方法

您的问题是您有一个控制器接收所有这些不同类型的模型.当您使用Rails表单助手时,他们从实例中获取对象类型并使用它来填充参数.这意味着你有params [:gender]而不是params [:chart]

您可以通过重写Rails用于生成表单的方法来解决此问题.将以下代码放在基础图表类中:

def self.model_name
  name = "chart"
  name.instance_eval do
    def plural;   pluralize;   end
    def singular; singularize; end
  end
  return name
end

现在,作为图表子项的任何类都将作为params [:chart]传递给您的接收操作

请记住,如上所述更改对象名称可能会破坏依赖它的某些插件/ gem的功能.你应该考虑拥有多个控制器.不是让ChartsController接收所有数据,而是使用GenderChartsController和LineChartsController.这有两个好处:

>您无需更改对象名称>如果将来需要特定类型图表的自定义代码,则不必添加条件语句以使其正常工作,因为不同的控制器已将其隔离.

(编辑:李大同)

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

    推荐文章
      热点阅读