我不太明白为什么在我的连接模型中插入数据之后,他们得出了奇怪的结果。
以下是我的模特
StaffRateItem
class StaffRateItem < ActiveRecord::Base
has_many :staff_default_rate_settings
has_many :assignment_type_categories, through: :staff_default_rate_settings do
def create_staff_default_rate_setting(assignment_type_category, rates_amount_attr)
StaffDefaultRateSetting.create(rates_amount: rates_amount_attr){ self << assignment_type_category}
end
end
accepts_nested_attributes_for :staff_default_rate_settings
end
AssignmentTypeCategory
class AssignmentTypeCategory < ActiveRecord::Base
has_many :staff_default_rate_settings
has_many :staff_rate_items, through: :staff_default_rate_settings
end
StaffDefaultRateSetting
class StaffDefaultRateSetting < ActiveRecord::Base
belongs_to :staff_rate_item
belongs_to :assignment_type_category
end
然后在我的 StaffDefaultRateSetting Controller 创建方法
下def create
@staff_rate_item = StaffRateItem.new(staff_rate_item_params)
@assignment_type_category1 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][0][:assignment_type_category_id])
@assignment_type_category2 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][1][:assignment_type_category_id])
@assignment_type_category3 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][2][:assignment_type_category_id])
@staff_rate_item.assignment_type_categories.create_staff_default_rate_setting @assignment_type_category1, params[:staff_rate_item][:staff_default_rate_setting][0][:rates_amount]
@staff_rate_item.assignment_type_categories.create_staff_default_rate_setting @assignment_type_category2, params[:staff_rate_item][:staff_default_rate_setting][1][:rates_amount]
@staff_rate_item.assignment_type_categories.create_staff_default_rate_setting @assignment_type_category3, params[:staff_rate_item][:staff_default_rate_setting][2][:rates_amount]
respond_to do |format|
if @staff_rate_item.save
format.html { redirect_to staff_default_rate_settings_url, notice: 'Staff default rate setting was successfully created.' }
format.json { render action: 'show', status: :created, location: @staff_default_rate_setting }
else
format.html { render action: 'new' }
format.json { render json: @staff_default_rate_setting.errors, status: :unprocessable_entity }
end
end
end
StaffDefaultRateSetting基本上是StaffRateItem和AssignmentTypeCategory模型的连接模型。
因此,在其物理表下,它具有以下字段。 的 ID staff_rate_item_id assignment_type_category_id rates_amount created_at 的updated_at
所以我说的是每次我插入一个新的staff_rate_item记录时,我希望为该staff_rate_item记录包括三个其他特定的assignment_type_category字段,以及它们各自的费率金额。因此,StaffDefaultRateSetting表中的最终结果是我将在那里看到三条记录。
但我获得了以下结果。
id | staff_rate_item_id | rates_amount | created_at | updated_at | assignment_type_category_id |
18 | | 20.00 | 2014-04-08 22:57:25.81432 | 2014-04-08 22:57:25.81432 | |
19 | | 20.00 | 2014-04-08 22:57:25.888068 | 2014-04-08 22:57:25.888068 | |
20 | | 20.00 | 2014-04-08 22:57:25.915939 | 2014-04-08 22:57:25.915939 | |
21 | 6 | | 2014-04-08 22:57:26.016725 | 2014-04-08 22:57:26.016725 | 1 |
22 | 6 | | 2014-04-08 22:57:26.021352 | 2014-04-08 22:57:26.021352 | 2 |
23 | 6 | | 2014-04-08 22:57:26.024253 | 2014-04-08 22:57:26.024253 | 3 |
如果仔细查看行,我会得到6条记录,而不是只有3条记录。费率金额被插入三个单独的行,而具有staff_rate_item_id和assignment_type_category_id的行被独立插入 - 没有费率金额!
这显然是非常错误的行为。
我一直在网上搜索很多,以确定我的模型创建逻辑在StaffDefaultRateSetting层上是否有问题。
def create_staff_default_rate_setting(assignment_type_category, rates_amount_attr)
StaffDefaultRateSetting.create(rates_amount: rates_amount_attr){ self << assignment_type_category}
end
或者可能是插入连接模型数据的基本设置我没有掌握(并且知道)。当然,插入这种简单的连接模型创建必须是基本代码。我在这做错了什么?我正在使用PostgreSQL进行开发,而不是MySQL只是fyi。
任何想法都将不胜感激!
答案 0 :(得分:0)
在花了一些时间思考这个问题之后,我又回到了绘图板并再次重做了基础知识。
这一次。我重做了StaffDefaultRateSetting Controller
中的代码def create
@staff_rate_item = StaffRateItem.new(staff_rate_item_params)
@assignment_type_category1 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][0][:assignment_type_category_id])
@assignment_type_category2 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][1][:assignment_type_category_id])
@assignment_type_category3 = AssignmentTypeCategory.find(params[:staff_rate_item][:staff_default_rate_setting][2][:assignment_type_category_id])
@staff_rate_item.staff_default_rate_settings.create(assignment_type_category_id: @assignment_type_category1.id, rates_amount: params[:staff_rate_item][:staff_default_rate_setting][0][:rates_amount] )
@staff_rate_item.staff_default_rate_settings.create(assignment_type_category_id: @assignment_type_category2.id, rates_amount: params[:staff_rate_item][:staff_default_rate_setting][1][:rates_amount] )
@staff_rate_item.staff_default_rate_settings.create(assignment_type_category_id: @assignment_type_category3.id, rates_amount: params[:staff_rate_item][:staff_default_rate_setting][2][:rates_amount] )
respond_to do |format|
if @staff_rate_item.save
format.html { redirect_to staff_default_rate_settings_url, notice: 'Staff default rate setting was successfully created.' }
format.json { render action: 'show', status: :created, location: @staff_default_rate_setting }
else
format.html { render action: 'new' }
format.json { render json: @staff_default_rate_setting.errors, status: :unprocessable_entity }
end
end
end
我在StaffRateItem模型中取出了我的def创建方法,我觉得重写的代码应该足以完成相同的任务,而不必担心尝试花哨的代码使得保存数据工作的主要麻烦,因为我按下了时间让我的客户的项目正在进行中。干杯!