【问题标题】:Auto-create `belongs_to` record自动创建 `belongs_to` 记录
【发布时间】:2015-12-02 02:21:03
【问题描述】:

以前有人问过类似的问题,但我就是想不通。

所以我有 Model_A 和 Model_B。模型_B belongs_to 模型_A。我想做的是在创建Model_A时自动为Model B调用create方法。然后一个脚本接管a为Model_B生成一堆数据。我使用after_create,因为这只需要发生一次。

它需要这样做。如果您想了解详细信息,请随时询问...

所以我在这里找到了 Model_A。我似乎无法在create_model_b 中获得正确的语法。在我使用的示例中,我只是收到一条错误消息,提示 Model_A 不存在该方法。

class Model_A < ActiveRecord::Base
  belongs_to :Model_B
  after_create :create_model_b

...

  def create_model_b
     #so I tried a bunch of stuff here but none of it worked
     #I need to create a Model_B which will contain the current Model_A id
     #ex. self.model_b.create(model_a_id: self.id)
  end
end

Model_B 并没有做任何特别的事情:

class Model_B < ApplicationController
def create
    @model_b = Model_B.new(model_b_params)
    create_the_data

    respond_to do |format|
      if @model_b.save
           #redirect
      else
        #uh oh
      end
    end
  end
end

谢谢!

【问题讨论】:

    标签: mysql ruby-on-rails database belongs-to


    【解决方案1】:

    两种方式:

    1.

    class Model_A < ApplicationController
    
    def create
      @model_a = ModelA.new(model_a_params)
      if @model_a.save
        ModelB.create(model_a_id: @model_a.id, .....)
        #create data for model B either here or with after_create (of model B)
        redirect_to somewhere_awesome_path
      else
         # rescue error
         render 'new'
      end
    end
    

    2.

    class Model_A < ActiveRecord::Base
      after_create :create_model_b
    
       ...
    
      def create_model_b
        ModelB.create(model_a_id: id)
      end
    end
    

    【讨论】:

    • 所以我尝试了这两种方法,但都不起作用。就好像 create 方法实际上没有被调用(尽管我没有得到任何关于它不存在的错误)。当我单步执行代码时,它绝对不会使用那种方法。嗯...@miler350
    • 是的。 @miler350 另外......似乎Model_B 也在创建中。但是当我去下载任何文件时,它们都是空白的。即使只是打印出字段也不会产生任何结果,尽管现在我明确地将它们设置为“TEST FIELD”之类的东西。
    • 另外,Model_B 是否有可能以某种奇怪的方式隐式生成?我绝对可以通过Model_A.id 找到我想要的Model_B 并打印内存引用。
    • 所以我让它工作了。不是它应该工作的方式。我创建Model_B 就像您呈现的第二种方式一样。该模型被退回,我将其存储在model_b_var。然后我model_b_var.create_files,我只是为此目的放入了那个模型,然后保存。我可以下载文件就好了。
    【解决方案2】:

    您的模型 A 包含一半的关联:belongs_to :Model_B

    您的模型 B 缺少与模型 A 的关联。

    根据您设置的关系,您可以完成与has_one :Model_Ahas_many :Model_A 的关联,例如。

    这里是Active Record documentation 供参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-07
      相关资源
      最近更新 更多