簡體   English   中英

Rails方式訪問模型中的關聯對象?

[英]Rails way to access associated object in model?

以下是我的關聯的定義方式:

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

訪問模型中關聯對象的rails方法是什么,它是顯式傳遞還是以其他方式傳遞?

我認為最好的方法是為Project模型創建一個導入方法,因為是擁有所有信息進行操作的對象:

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

...

project.rb

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

@ project.assets.import的解決方案違反了項目對象的封裝。

我認為您在談論的是accepts_nested_attributes_for

我回答了一個類似的問題,可能會有所幫助, 從表單創建has_many關系

您不需要這樣做。 首先是第一件事。 您可以使用Rails的方式簡化所有事情。

#routes.rb
resources :projects do
  resources :assets
end

#assets_controller.rb
def import
  @project = Project.find params[:project_id]
  if @project
    @project.assets.create(params[:file]) #specify permitted params
  end

end

但是,如果要處理多媒體文件,則應使用寶石,例如回形針或載波。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM