2012-05-23 76 views
1

Similar Setup on StackoverflowRails 3 - reject_if has_many:通過關聯不可能?

那裏嗨,

我有我的嵌套形式設置有點問題......

模式 「時移」

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 

在這裏最重要的一點是,我在加入型號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和confirmed_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_id直到相應article_position已經保存: -/

任何想法來解決這個問題?

乾杯,

邁克爾

回答

0

其實這WILL創建映射表(ArticlePositionTimeShiftingAssignment)的新紀錄,這是正確的,因爲它是many-to-many關聯。因此,在這種情況下,將一些其他記錄分配給映射表並不是一種好方法。

+0

Mhh。這是有道理的,你在說什麼。我只是沒有看到正確的選擇......當用戶創建time_shifting時,他應該能夠添加/創建一些article_positions。那些article_positions可以稍後用於其他time_shiftings。每個創建/分配的article_positions都應該有一些額外的字段(order_number,delivery_date)。 Mhh ...我需要一個帶有(time_shifting_id,article_pos_id,foobar_id)的表格。 Foobar_id將鏈接到其他屬性。這不完全是一回事嗎? – sufu90