如果在查看演示之前尚未创建,则生成加入 table 记录
Generate join table records if non yet created before view presentation
Product 模型需要通过嵌套表单更新其数据以用于连接 table
Product
has_many :productunits, dependent: :destroy
has_many :units, through: :productunits
Unit
has_many :productunits, dependent: :destroy
has_many :products, through: :productunits
调用 @productunits = Productunit.where(['product_id = ?', params[:id]]).all
时仅显示现有的产品单元。如果同时创建一个单元,则建议的列表是不完整的。
然而,编辑操作需要创建新的产品单元并填充各种初始数据,如果它们尚不存在,在 之前将它们显示在视图中。
什么 ruby 语法可以达到这个结果?
更新
我已启用控制器执行以下操作
before_filter :set_product_units, :only => [:edit]
private
def set_product_tipounits
@units = unit.where(['org_id = ?', session[:org_id]]).all
@productunits = Productunit.order("id ASC").where(['product_id = ?', params[:id]]).all
@units.each do |unit|
@join_created = Productunit.where(['product_id = ? AND unit_id = ?', params[:id], unit.id]).first
if @join_created.nil?
@productunit = Productunit.new(:product_id => params[:id], :unit_id => unit.id, :auto_generate => false, :auto_price => false, :release_days => "30")
@productunit.save
end
end
问题已解决...
很高兴您找到了解决方案,但您的解决方案确实坚持让您的控制器知道的关于 "has_many_through" 关系的信息比它应该知道的要多。
更抽象的解决方案可能是...
在UnitController的创建方法中
def create
...
if @unit.save
Product.all.each{|p| p.units << @unit unless p.units.include? @unit}
...
end
end
类似地在 ProductController
def create
...
if @product.save
Unit.all.each{|u| u.products << @product unless u.products.include? @product }
...
end
end
编辑
您也可以将此作为模型中的回调来执行。
class Unit << ActiveRecord::Base
after_save :add_to_products
def add_to_products
Product.all.each{|p| p.units << self unless p.units.include? self}
end
end
Product 模型需要通过嵌套表单更新其数据以用于连接 table
Product
has_many :productunits, dependent: :destroy
has_many :units, through: :productunits
Unit
has_many :productunits, dependent: :destroy
has_many :products, through: :productunits
调用 @productunits = Productunit.where(['product_id = ?', params[:id]]).all
时仅显示现有的产品单元。如果同时创建一个单元,则建议的列表是不完整的。
然而,编辑操作需要创建新的产品单元并填充各种初始数据,如果它们尚不存在,在 之前将它们显示在视图中。
什么 ruby 语法可以达到这个结果?
更新 我已启用控制器执行以下操作
before_filter :set_product_units, :only => [:edit]
private
def set_product_tipounits
@units = unit.where(['org_id = ?', session[:org_id]]).all
@productunits = Productunit.order("id ASC").where(['product_id = ?', params[:id]]).all
@units.each do |unit|
@join_created = Productunit.where(['product_id = ? AND unit_id = ?', params[:id], unit.id]).first
if @join_created.nil?
@productunit = Productunit.new(:product_id => params[:id], :unit_id => unit.id, :auto_generate => false, :auto_price => false, :release_days => "30")
@productunit.save
end
end
问题已解决...
很高兴您找到了解决方案,但您的解决方案确实坚持让您的控制器知道的关于 "has_many_through" 关系的信息比它应该知道的要多。
更抽象的解决方案可能是...
在UnitController的创建方法中
def create
...
if @unit.save
Product.all.each{|p| p.units << @unit unless p.units.include? @unit}
...
end
end
类似地在 ProductController
def create
...
if @product.save
Unit.all.each{|u| u.products << @product unless u.products.include? @product }
...
end
end
编辑 您也可以将此作为模型中的回调来执行。
class Unit << ActiveRecord::Base
after_save :add_to_products
def add_to_products
Product.all.each{|p| p.units << self unless p.units.include? self}
end
end