Ruby on Rails。 模型关联

我有一个Model, file.rb ,一个控制器, filecontroller.rb ,和一个名为files的表视图的集合。 这样做是为了能够上传Excel文件,以便我可以在某人上传Excel文件的索引视图中查看列表,创build时间以及上传Excel文件的人员的姓名。

现在,我还有另一个Model, bottle.rb ,一个控制器,一个bottlecontroller.rb ,以及一个视图集合,这个视图在数据库中叫做bottles 。 数据库中瓶表中的列与Excel文件相同。

我已经有能力上传Excel文件后,一些validation,以便他们可以进入数据库中的files表。 而且我也遵循了rails的教程,能够从瓶子索引视图中导入一个excel文件并更新我的bottles表格。

不过,我希望能够上传一个Excel文件,并在文件索引视图中导入信息。 但import也需要更新瓶子表中的信息。 换句话说,从文件索引视图导入Excel需要能够更新瓶表数据库。

我知道我需要我的files.rb模型和bottles.rb模型之间的关联..但任何帮助将是可怕的!

************更新后的问题************************************ *****

在我的filecontroller.rb ,保存后在create方法中添加了@file.bottles = Bottle.import(params[:file_url]) 。 我将excel文件存储在:file_url 。 我还在has_many :bottles file.rb模型中添加了一个关联

  def create ......... .......... if file.save @file.bottles = Bottle.import(params[:file_url]) end end 

在我的瓶子模型bottle.rb我有

 def self.import(file_url) spreadsheet = Roo::Excel.new(file_url.path, packed:nil,file_warning: :ignore) ......... bottle.save! end 

但是我得到了一个未定义的方法path' for nil:NilClas error in this line spreadsheet = Roo :: Excel.new(file_url.path,packed:nil,file_warning::ignore)`这不认可file_url作为Excel的path文件。

有两种方法:在控制器中执行或在模型中使用callback。

如果您只需要在用户从特定视图导入时执行此操作,则可以在控制器内处理该操作。 例如,如果在索引文件视图中上传excel文件,则会调用files_controller.rb中的“create”操作,您可以执行如下操作:

if @file.save # update bottle database using data from @file end

但是,如果您希望在每次创build新文件时完成此操作,则可以通过视图或不在视图中添加after_createcallback到您的file.rb模型。 如果您希望在保存后每次都完成,则可以执行after_savecallback。

好的在if @file.save

我添加了Bottle.import(@file.file_url.path)

而在bottle.rb模式中,我改变了

 spreadsheet = Roo::Excel.new(file_url.path, packed: nil,file_warning: :ignore) 

 spreadsheet = Roo::Excel.new(file_url, packed: nil,file_warning: :ignore) 

和BOOM!

Interesting Posts