2012-07-24 31 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