2015-12-13 33 views
0

我嵌套模型看起來像下面軌道4型號:</p> <pre><code>"project": { "name": "My Project Name", "tasks_attributes": [ {"name": "Design prototype"}, {"name": "Home page UI prototype"}, {"name": "Other Miscellaneous task"} ] } </code></pre> <p>我知道我:如何使用JSON數據

class Project < ActiveRecord::Base 
    has_many :tasks 
    accepts_nested_attributes_for :tasks 
end 

class Project::Task < ActiveRecord::Base 
    attr_accessible :task_id, :name 
    belongs_to :Project 
end 

這我通過閱讀CSV文件,建立我的JSON數據來創建記錄可以讓rails模型通過發佈上面的json創建記錄來創建跟隨控制器的方法。

project_params = params.require(:project).permit(:name, tasks_attributes: [:name]) 
Project.new(project_params) 

因爲我上載其到JSON進一步轉換服務器csv文件,我想直接傳遞JSON數據模型來創建數據庫裏面記錄(嵌套)。有沒有辦法做到這一點?

回答

1

答案取決於您是否允許用戶上傳CSV文件,或者您是否在服務器上手動執行此操作。

-

如果你正在做它的服務器上,我會用一個Rake task;如果你允許上傳,你可以使用控制器操作。該代碼將在兩種情況下保持相似:

#CSV on Server 
#lib/tasks/csv_process.rake 
namespace :csv do 
    desc "Process the CSV" 
    task :process => :environment do 
    file_name = File["path/to/file"] 
    CSV.foreach(file_name, :headers => true) do |row| 
     Project.create row.to_hash 
    end 
    end 
end 

這rake任務然後可以使用rake csv:process,這既可以手動運行可以從該服務器運行bash shell中,或者將其綁到cron job

-

如果你想通過CSV的直接您的應用程序(雖然我沒有這樣做過),你會使用一個控制器的操作,例如以下內容:

#app/controllers/projects_controller.rb 
class ProjectsController < ApplicationController 
    def create 
     file = project_params[:file] 
     CSV.foreach(file, :headers => true) do |row| 
      Project.new row.to_hash 
     end 
    end 

    private 

    def project_params 
     params.require(:project).permit(:file) 
    end 
end 
0

您可以使用CSV類來解析CSV。

它會創建一個Hash,您將能夠將它傳遞給你模型。

但請注意傳遞哪些參數。在將它們發送到數據庫之前檢查它們。否則,您將有可能不允許訪問受保護的屬性。例如,用戶可以修改數據庫中存在的role屬性。

您可以在Strong Parameters文檔中閱讀有關此漏洞的更多信息。

快樂編碼:)。

1

要回答如何能夠保存JSON數據,這裏是你能做什麼:

  1. 解析您的CSV,建立自己的json =>data = your_json_here
  2. instance = YourModel.new(JSON.parse(data))#這是你的JSON數據轉換成散列
  3. instance.save

沒有測試,但是這是我腦海最快的東西。 確保在保存數據之前檢查參數(再次說明您需要做的檢查)

希望有所幫助!

+0

任何人都可以告訴我爲什麼答案是投下來的?它不是回答你的問題,還是答案錯誤?還是脫節了?在任何意義上,這個答案確實回答了這個問題,我認爲沒有理由拒絕投票。我很想從下來的選民那裏得到一些解釋,可能我錯過了一些東西。 –

+0

'save'不是模型類的方法。也許,這是downvote的原因。 –

+0

修正了:)這是一個錯字。 –

相關問題