0
Dealモデルのrails appにExcelのインポート(スプレッドシートとRooの宝石を使用)を実装しました。excel(Rails)からインポートしたDealモデルインスタンスにuser_idとjournal_idを割り当てるにはどうすればいいですか
取引モデルは、ユーザーとジャーナルに属します。 インポートされた各取引に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
しかし、この場合には、ユーザーが自分のuser_idを入力環境により、他のユーザーの雑誌にアクセスすることができますand journal_id in excelファイル。
excelファイルから取引をインポートする際に、各取引にuser_idとjournal_idを自動的に割り当てる最良の方法は何ですか?
問題はそのディールモデル(またはいずれかである:ちょうど必要なパラメータを渡し、
そして、あなたのコントローラ内の他のモデル)は、journal_controllerのcurrent_userヘルパーや@journalへのアクセス権を持っていません。 – electrify
私の答えが更新されましたが、どこから '@ journal 'を取得するのかはわかりませんが、適応しやすいはずです。 – Wukerplank
偉大な、それは今、多くのおかげで動作します! – electrify