2013-05-15 47 views
0

这里是我的数据结构:模特协会在哪里?

class Report < ActiveRecord::Base 
    has_many :keywords 
end 

class Keyword < ActiveRecord::Base 
    belongs_to :report 
end 

当创建一个Report,关键字数据是从第三方API检索。

def create 
    @report = Report.new(params[:report]) 
    @report.get_keywords  
    create! 
    end 

Report模型与返回第三方数据的服务对象进行交互。然后应将数据转换为keywords,并且应该对新创建的Report进行关联。

在检索数据后Report模型中是否应该创建keywords?该协会是否也在那里?

编辑:这是我的报告模型。如何从模型内部创建关联?

def get_keywords 
    data = ThirdPartyDataFetcher.new.fetch_keywords 
    create_keywords(data) 
    end 

    private 

    def create_keywords(data) 
    data.each do |key, value| 
     keyword = Keyword.new 
     keyword.description = key 
     keyword.total_value = value 
     # An association should be made and the keyword should be saved 
     self.keywords << keyword 
     keyword.save 
    end 
    end 

回答

0

从设计的角度来看fi no关键字可以没有报告生活,报告应该持有逻辑来管理它们。所以你的问题的答案是肯定的,关键字应该在Report类以及关联中创建。

+0

如何从模型类中创建关联?我只是通过控制器 – mnort9

+0

@ mnort9 ...'self.keywords << the_keyword_generator',或'='或其他什么来建立关联。虽然如果它来自API,我可能有一些注入关键字生成方法的方法。 –

+0

你是什么意思?在Report类中,您有一个对关键字集合的引用,您可以使用它。例如: self.keywords ='key1' – ema