如何从关联表单中获取数据并将其插入主模型的关联表中?
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
我正在为供应商和帐户提供合并表格。当我提交时,我需要找到一种方法将相应的值插入供应商和帐户。问题是供应商值正确插入但不是帐户。
我在几个论坛,小组甚至是筹码中都提出了同样的问题,但似乎没有人给出令人信服的答案。
答案 0 :(得分:0)
基本策略是首先查看提交表单时提交的参数。您可以在控制器操作中添加一行,例如raise params.inspect
来查看。确保这些段落包含您需要的所有数据;如果没有那么在视图中存在一些产生该形式的问题。
让所有数据进入控制器操作后,您需要更改控制器操作,以便正确解释所有数据并将其放入正确的模型中。
除非您显示视图的代码,执行params.inspect
的结果以及获取数据的控制器操作的代码,否则我无法提供任何更具体的建议。
答案 1 :(得分:0)
试试这个。
假设您有orders
和customers
个表,并且您希望从订单表单对客户执行CRUD操作。
客户模型非常简单
class Customer < ActiveRecord::Base
attr_accessible :name
end
Order
模型必须为所有客户的属性(attr_accessor
构造)提供虚拟属性。 customers
的CRUD是通过回调提供的。也可以使用验证。
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