在rails控制器中多次保存

时间:2012-07-24 23:03:14

标签: ruby-on-rails ruby ajax

从我的客户端,我发送一个与其他对象相关的对象:

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

1 个答案:

答案 0 :(得分: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

中查看有关Active Record Relations的更多详细信息