2010-06-29 85 views
1

我最近遇到了一個記錄被標記爲只讀的問題。檢查出我發現這個文檔:「裝通過與背馱式連接的屬性爲只讀,因爲它們不能被保存將被標記記錄」爲什麼不能保存捎帶屬性的記錄?

爲什麼不呢?我的模型如下所示:

class MailAccount 
    belongs_to :account, :class_name => "UserAccount" 
    named_scope :active, :joins => :account, 
     :conditions => "user_accounts.archived_at IS NULL" 
end 

我找不到爲什麼使用此命名範圍裝載的模型無法保存。有任何想法嗎?

+1

該解決方案屬於下面的答案,旁邊有一個綠色複選標記。 – 2010-06-29 07:55:24

+0

謝謝Ignacio指出這一點。 – 2010-06-29 08:04:22

回答

2

事實證明,我必須將:select => "mail_accounts.*"添加到範圍,否則查詢會將來自user_accounts的屬性存儲在MailAccount對象中,從而阻止它被保存。

所以正確的代碼使用的是:

class MailAccount 
    belongs_to :account, :class_name => "UserAccount" 
    named_scope :active, :joins => :account, 
     :conditions => "user_accounts.archived_at IS NULL", 
     :select => "mail_accounts.*" 
end 
1

當你使用:加入,ActiveRecord的模型是相關聯的對象不是實例。你應該使用:include來代替。

+0

謝謝您的回答,但我將其用作純粹的選擇範圍,否則通常不需要關聯類。在那些情況下,儘管如此,出於效率原因,使用解決方案可能會更好。 – 2010-06-30 06:02:30