0

我正在构建一个使用一种元问题模型的报告系统。问题预先保存在数据库中,然后根据报告的类型从数据库中提取一些问题。

想要保持干燥,我试图找出一种方法将Variable模型的信息传递给我report_header,但无济于事。

new我的行动中:

  reportBody = @report_head.report_bodies.build(:variable_id => a.id)
  @report_head.variables #modified, thx.

我需要的只是以Variable某种DRY方式将属性从报告头传递给报告头。

如果您需要了解我的模型:

class Variable < ActiveRecord::Base
  attr_accessible :id,:break_point, :description, :name, :time_frequency, :v_type
  has_many :report_bodies
  has_many :report_heads, :through => :report_bodies   
end

class ReportHead < ActiveRecord::Base
  attr_accessible :email, :name , :report_bodies_attributes, :report_bodies, :variables_attributes
  has_many :report_bodies
  has_many :variables, :through => :report_bodies   
  accepts_nested_attributes_for :report_bodies
end

class ReportBody < ActiveRecord::Base
  attr_accessible :report_head_id, :variable_value, :variable_id, :variables_attributes, :report_heads
  belongs_to :report_head
  belongs_to :variable
end

更新

我按照建议更新了模型,并修改了调用变量的方式。但是,如果我执行以下操作,我仍然对如何在视图中使用它感到困惑:

   <%= f.fields_for :variables do |variable| %>
       <%= variable.text_field :name, :value => :name, :class => 'text_field' %>  
   <% end %>

它打印一个字符串而不是实际名称。

4

1 回答 1

1

您定义了错误的名称关联,您的 ReportBody 关联应该是:

belongs_to :report_head 
belongs_to :variable 

这是不正确的:

@report_head.report_bodies.build(:variable_id => a.id,:report_head_id =>@report_head.id) 

将其更改为:

@report_head.variables.build(:variable_id => a.id)

更好的是,您不必设置report_head_id。这是错误的:

@report_head.report_bodies.variables

如果你想得到所有变量属于@report_head,你只需要使用:

@report_head.variables
于 2012-11-16T21:34:11.287 回答