【问题标题】:How do I assign user_id and journal_id to the Deal model instance imported from excel (Rails)如何将 user_id 和 journal_id 分配给从 excel(Rails)导入的 Deal 模型实例
【发布时间】:2017-06-20 11:05:52
【问题描述】:

我已经在我的 Rails 应用中为 Deal 模型实现了 excel 导入(使用电子表格和 roo gem)。

交易模型属于用户和日志。 我需要将 current_user.id 和 @journal.id 归因于每个导入的交易。

这就是我现在拥有的:

deals_controller.rb

def import
  @user = current_user
  Deal.import(params[:file])
  redirect_to journals_path, notice: "Deals imported."
end

deal.rb

def self.import(file)
  spreadsheet = open_spreadsheet(file)
  header = spreadsheet.row(1)
  (2..spreadsheet.last_row).each do |i|
    row = Hash[[header, spreadsheet.row(i)].transpose]
    deal = find_by_id(row["id"]) || new
    deal.attributes = row.to_hash.slice(*accessible_attributes)
    deal.save!
  end
end

def self.accessible_attributes 
    ['user_id', 'journal_id', 'date_in', 'date_out', 'ticker', 'type', 'open_price', 'close_price', 'quantity', 'revenue',] 
end

def self.open_spreadsheet(file)
  case File.extname(file.original_filename)
  when ".csv" then Roo::Csv.new(file.path, nil, :ignore)
  when ".xls" then Roo::Excel.new(file.path, nil, :ignore)
  when ".xlsx" then Roo::Excelx.new(file.path, options={})
  else raise "Unknown file type: #{file.original_filename}"
  end
end

但在这种情况下,用户可以通过在 excel 文件中输入他们的 user_id 和 journal_id 来访问其他用户的日志。

在从 excel 文件导入交易时,自动为每个交易分配 user_id 和 journal_id 的最佳方法是什么?

【问题讨论】:

    标签: ruby-on-rails import spreadsheet roo-gem


    【解决方案1】:

    只需将您想要分配给模型的值分配:

    def self.import(file, user_id, journal_id)
      spreadsheet = open_spreadsheet(file)
      header = spreadsheet.row(1)
      (2..spreadsheet.last_row).each do |i|
        row = Hash[[header, spreadsheet.row(i)].transpose]
        deal = find_by_id(row["id"]) || new
        deal.attributes = row.to_hash.slice(*accessible_attributes)
        deal.user_id = user_id
        deal.journal_id = journal_id
        deal.save!
      end
    end
    

    在您的控制器中,只需传入所需的参数:

    def import
      Deal.import(params[:file], current_user.id, @journal.id)
      redirect_to journals_path, notice: "Deals imported."
    end
    

    【讨论】:

    • 问题是 Deal 模型(或任何其他模型)无法从 journal_controller 访问 current_user 助手或 @journal
    • 更新了我的答案,我不知道你从哪里得到@journal,但它应该很容易适应。
    猜你喜欢
    • 2020-12-14
    • 1970-01-01
    • 2015-01-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2020-06-08
    • 2021-03-10
    相关资源
    最近更新 更多