【问题标题】:Rails 3 - reject_if on has_many :through association not possible?Rails 3 - has_many 上的 reject_if :不可能通过关联?
【发布时间】:2012-05-30 05:55:33
【问题描述】:

Similar Setup on Stackoverflow

你好,

我的嵌套表单设置有点问题...

模型“时移”

class TimeShifting < ActiveRecord::Base
  has_many :article_position_time_shifting_assignments, :dependent => :destroy
  has_many :article_positions, :through => :article_position_time_shifting_assignments
  accepts_nested_attributes_for :article_position_time_shifting_assignments
end

加入模型“ArticlePositionTimeShiftingAssignment”

class ArticlePositionTimeShiftingAssignment < ActiveRecord::Base
  belongs_to :article_position
  belongs_to :time_shifting
  accepts_nested_attributes_for :article_position, :reject_if => proc { |obj| obj['baan_id'].blank? }
end

模型“ArticlePosition”

class ArticlePosition < ActiveRecord::Base
  has_many :article_position_time_shifting_assignments
  has_many :time_shiftings, :through => :article_position_time_shifting_assignments
end

这里的重点是我在 Join Model ArticlePositionTimeShiftingAssignment 中有一些额外的属性...

  create_table "article_position_time_shifting_assignments", :force => true do |t|
    t.integer  "article_position_id"
    t.integer  "time_shifting_id"
    t.integer  "created_by"
    t.integer  "updated_by"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "order_number"
    t.date     "confirmed_date"
    t.string   "purchase_positions_collection"
  end

created_by 和 updated_by 正在自动填写,order_number 和 confirm_date 通过表格。

嗯...我绝对没有问题来创建一个新的 ArticlePosition

<%= f.simple_fields_for :article_position_time_shifting_assignments do |builder| %>

然后

<%= f.simple_fields_for :article_position do |builder| %>

我的问题是它总是创建一个新的 article_position_time_shifting_assignment 记录。即使它没有创建新的 ArticlePosition。

#<ArticlePositionTimeShiftingAssignment id: 10, article_position_id: nil, time_shifting_id: 10, created_by: 1, updated_by: 1, created_at: "2012-05-23 14:57:27", updated_at: "2012-05-23 14:57:27", order_number: "", confirmed_date: nil, purchase_positions_collection: "">

Mhhhh...我不想要那个:P

accepts_nested_attributes_for :article_position_time_shifting_assignments, :reject_if => proc { |obj| obj['article_position_id'].blank? }

这不起作用,因为在保存相应的 article_position 之前没有 article_position_id:-/

有解决这个问题的想法吗?

干杯,

迈克尔

【问题讨论】:

    标签: ruby-on-rails-3 nested-attributes has-many-through


    【解决方案1】:

    其实它WILL会在Mapping表(ArticlePositionTimeShiftingAssignment)中创建新的记录,它是正确的,因为它是many-to-many关联。所以在这种情况下,将一些额外的记录分配给映射表并不是一个好方法。

    【讨论】:

    • 嗯。你说的很有道理。我只是没有看到正确的选择......当用户创建 time_shifting 时,他应该能够添加/创建一些 article_positions。这些 article_positions 可以稍后用于其他 time_shiftings。每个创建/分配的 article_positions 都应该有一些额外的字段(order_number、delivery_date)。嗯...我需要一个带有(time_shifting_id、article_pos_id、foobar_id)的表。 Foobar_id 将链接到其他属性。这不完全一样吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    • 1970-01-01
    • 1970-01-01
    • 2013-11-24
    • 2015-07-04
    相关资源
    最近更新 更多