2017-06-20 12 views
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を自動的に割り当てる最良の方法は何ですか?

答えて

0

ちょうどあなたがモデルに割り当てる値を割り当てる:

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

問題はそのディールモデル(またはいずれかである:ちょうど必要なパラメータを渡し、

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 

そして、あなたのコントローラ内の他のモデル)は、journal_controllerのcurrent_userヘルパーや@journalへのアクセス権を持っていません。 – electrify

+0

私の答えが更新されましたが、どこから '@ journal 'を取得するのかはわかりませんが、適応しやすいはずです。 – Wukerplank

+0

偉大な、それは今、多くのおかげで動作します! – electrify

関連する問題