2017-05-17 45 views
2

以下是如何我协会的定义:Rails的方式来访问模型相关联的对象?

class Project < ApplicationRecord 
    has_many :assets 
end 

class Asset < ApplicationRecord 
    belongs_to :project 
end 

现在我想要实现资产导入功能,我应该实现这样的:

# assets_controller.rb 
def import 
    Asset.import(params[:file], @project) 
    .. 
end 

# asset.rb 
def self.import(file, project) 
    .. 
end 

或象下面这样:

# assets_controller.rb 
def import 
    @project.assets.import(params[:file]) 
    .. 
end 

# asset.rb 
def self.import(file) 
    project = self.first.project 
    .. 
end 

什么是轨道的方式来访问模型中的关联对象,它是通过明示或其他方式?

回答

3

我认为最好的办法是,因为是谁拥有的所有信息做操作的对象,以创建导入法项目模型:

def import 
    @project.import_asset(params[:file]) 
end 

... 

project.rb

def import_asset(file) 
    assets.build(...) 
end 

的@ project.assets.import的解决方案违反了项目对象的封装。

+0

,把它import_asset(文件)将使其更具可读性 – s1mpl3

+0

是的,我同意,我已经更新了帖子 –

0

您不必这样做。首先要做的事情。你可以使用Rails的方式来简化所有的事情。但是,如果你正在处理多媒体文件,你应该使用一个gem,比如paperclip或者carrierwave。