2017-05-17 46 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。