0

如何从关联表单中获取数据并将其从主模型插入到关联表中?

class Supplier < ActiveRecord::Base  
  has_one :account, foreign_key: "acc_sup_id", :autosave => true   
  self.primary_key = 'sup_id'  
end  

class Account < ActiveRecord::Base  
  belongs_to :supplier, foreign_key: "acc_sup_id"  
  self.primary_key = 'acc_id'  
  self.table_name = 'accounts'  
end

我有一个供应商和帐户的组合表格。当我提交时,我需要找到一种方法将相应的值插入到供应商和帐户中。问题是供应商值正确插入但不是帐户。

我在几个论坛、小组甚至堆栈中都问过同样的问题,但似乎没有人给出令人信服的答案。

4

2 回答 2

0

尝试这个。

假设有orderscustomers表,并且您想从订单表单中对客户执行 CRUD 操作。

客户模型非常简单

class Customer < ActiveRecord::Base
  attr_accessible :name
end

Order模型必须为所有客户的属性(attr_accessor构造)提供虚拟属性。CRUD forcustomers是通过回调提供的。也可以使用验证。

class Order < ActiveRecord::Base
  attr_accessor :customer_name
  attr_accessible :description, :number, :customer_name
  belongs_to :customer

  validates_presence_of :number
  validates_presence_of :description
  validates_presence_of :customer_name

  before_save :save_customer
  after_find :find_customer
  after_destroy :destroy_customer

  protected

  def save_customer
    if self.customer
      self.customer.name = self.customer_name
    else
      self.customer = Customer.create(name: self.customer_name)
    end
    self.customer.save
  end

  def find_customer
    self.customer_name = self.customer.name
  end

  def destroy_customer
    self.customer.destroy
  end
end

订单模型的示例网格。

class Orders < Netzke::Basepack::Grid
  def configure(c)
    super
    c.model = 'Order'
    c.items = [
      :description,
      :number,
      :customer_name
    ]
    c.enable_edit_inline = false
    c.enable_add_inline = false
  end

  def preconfigure_record_window(c)
    super
    c.form_config.klass = OrderForm
  end
end

订单模型的示例表单。

class OrderForm< Netzke::Basepack::Form
  def configure(c)
    super
    c.model = 'Order'
    c.items = [
      :description,
      :number,
      :customer_name
    ]
  end
end
于 2013-05-30T17:00:44.183 回答
0

基本策略是在提交表单时首先查看提交的参数是什么。您可以在控制器操作中添加一行raise params.inspect以查看它。确保这些段落包含您需要的所有数据;如果不是,那么生成该表单的视图中存在一些问题。

一旦您获得了控制器动作的所有数据,那么您需要更改控制器动作,以便正确解释所有数据并将其放入正确的模型中。

params.inspect除非您显示视图的代码、doing 的结果以及获取数据的控制器操作的代码,否则我无法给出更具体的建议。

于 2013-04-29T06:38:03.563 回答