2012-07-24 41 views
0

從我的客戶,我送這是關係到其他對象的對象:多個在軌控制器節省

 
var data = { 
    "comment": result.comment, 
    "doc": { 
    "id": result.doc.id 
    } 
    "site": { 
    "url": result.site.url 
    } 
}; 

$.ajax({ 
    url: '/data', 
    type: 'POST', 
    data: data 
}); 

這被貼到我的/data控制器。在create方法,我有這個代碼塊:

 
def create 
    @data = Data.new(params[:data]) 
    @data.user_id = current_user.id 

    respond_to do |format| 
    if @data.save 
     @doc = Doc.find_or_create_by_id(params[:doc]) 
     @doc.save 
     @site = Site.new(params[:site]) 
     @site.doc_id = @doc.id 
     @site.save 

     format.html //stuff 
     format.json //stuff 
     format.js //stuff 
    end 
end 

我很好奇,如果我正確地處理這個問題。對於像我這樣的相關對象,控制器似乎相當「沉重」。

有沒有其他解決方案來解決這個問題呢?

編輯:

數據模型:

 
class Data 
    belongs_to :site, :polymorphic => true 
    belongs_to :user 
end 

回答

2

請問你的數據模型樣子?你有所有嵌套屬性的賦值方法嗎?

def create 
    @data = Data.new(params[:data]) 
    @data.user = current_user 

    respond_to do |format| 
    if @data.save 
     @doc = Doc.find_or_create_by_id(params[:doc][:id]) 
     @site = @doc.sites.create(params[:site]) 

     format.html //stuff 
     format.json //stuff 
     format.js //stuff 
    end 
end 

您可以在Rails Guides中查看有關活動記錄關係的更多詳細信息。

+0

只是爲了解釋,使用create方法時記錄會自動保存。 – 2012-07-25 00:41:37

+0

@ismaelga你是什麼意思? yuri&dty:感謝您的幫助! – 2012-07-25 01:47:25

+0

@rabid_zombie在這個問題上看到答案:http://stackoverflow.com/questions/4333163/question-about-create-and-new-methods-in-activerecord-class – 2012-07-25 02:29:51