2017-05-31 29 views
0

所以我們在activerecord類中的readonly?方法有一些困難。看來,任何牽強一起joins通話被設置爲只讀,並拋出這個錯誤Ruby on Rails:任何使用'連接'選擇的內容都是隻讀的

ActiveRecord::ReadOnlyRecord: ActiveRecord::ReadOnlyRecord 

例如:

# fine 
User.first.readonly? 
User.first.save 
# not fine 
User.joins(:memberships).first.readonly? 
# false 
User.joins(:memberships).first.save 
# ActiveRecord::ReadOnlyRecord 

按照Rails documentation這將被設置爲false「記錄裝通過連接捎帶屬性。「

據我所知,我們在這裏不包括任何捎帶屬性。

我可以強行規避這個限制,但感覺就像我在不必要地通過系統進行黑客攻擊。

user = User.joins(:memberships).first 
User.instance_variable_set(:@readonly, false) 
user.save 

有誰知道爲什麼連接返回只讀項目?我能阻止這個嗎? (我不想從相關對象中選擇任何屬性)。

我使用Ruby on Rails的版本3.2.22.5,它看起來像這樣已經從Rails的早期版本行爲的改變3.

+0

FWIW,Rails 3.2超過5歲。當它發佈時,Siri是全新的,金正日仍然是朝鮮的領導人,Lyft還沒有發佈。它不再受Rails團隊的支持,不再被認爲是安全的。如果您仍然在較新版本的Rails上遇到此問題,請更新或提出新問題。 – coreyward

+0

@coreyward我很高興你覺得能夠提供這些信息。我沒有任何線索,因爲我住在一個山洞裏。 – AJFaraday

+0

啊,所以你也意識到[這是固定在這裏](https://github.com/rails/rails/pull/10769),並可供您免費下載,因爲其他人貢獻了他們的時間爲你解決它,你只需要下載並使用它。但是,嘿,繼續諷刺和堅持*我們是因爲沒有爲你做所有事情的混蛋。 – coreyward

回答

0

使用嘗試包括,而不是加入,這是更好,更快。

User.include(:memberships).first