2
A
回答
3
不要誤會。在OP的問題中,<<
是而不是的一種方法Array
。相反,這是一種方法ActiveRecord::Associations::CollectionProxy
。
源這裏
def <<(*records)
proxy_association.concat(records) && self
end
alias_method :push, :<<
alias_method :append, :<<
https://github.com/rails/rails/blob/b15ce4a006756a0b6cacfb9593d88c9a7dfd8eb0/activerecord/lib/active_record/associations/collection_proxy.rb#L944代碼(代碼爲導軌4,而在導軌3它的工作原理是相同的)
該方法對於其中HAS_MANY其他對象的對象。其他對象的集合可以用這個方法來添加新的關聯對象,關聯ID自動分配和新對象得到了保存到數據庫
class Question < ActiveRecord::Base
has_many :answers
question = Question.last # id: 100
question.answers.size # 0
question.answers << Answer.new(body: 'demo answer')
question.answers.size # 1
Answer.last # id: 1, question_id: 100, body: 'demo answer'
# Note here, the contacted answer got saved in db.
您還可以使用它的工作原理相同的別名方法:
question.answers.push Answer.new(body: 'demo answer')
question.answers.append Answer.new(body: 'demo answer')
0
使用此方法,如果self.groups
是數組,則可以將元素推送到數組中。
0
<<
是一個根據基類數組和字符串來連接在串的情況下,對象以任何陣列或字符串(.to_s
方法必須在鄰來限定定義的紅寶石「追加」運算符bject)。
任何Ruby運算符都可以在Ruby中重載。任何Ruby運算符都可以在任何自定義類中使用,就像任何其他命名方法一樣。
In Rails ActiveRecord ::關聯<<
運算符被定義爲將記錄追加到關聯中。 (請參閱底部的參考)
在您的特定示例中,<<
運算符會將找到的記錄追加到「組」關聯中。如果沒有找到記錄,則不會追加任何記錄。
下面是如何在一類過載(或限定)<<
一個例子:
class Array
def <<(arg)
puts arg.inspect
end
end
[] << 'something awful'
=> 'something awful'
參見:
相關問題
- 1. 在Ruby on Rails視圖模板中「<%_」是什麼意思?
- 2. Ruby on Rails的:對#<#<Class:>>
- 3. Ruby on Rails語法<%vs <%=
- 4. <Ruby on Rails>路線
- 5. <%% =在Ruby on Rails中的含義是什麼?
- 6. 在Ruby On Rails視圖中替代<%=?
- 7. 差<%=表達式%>和<%=表達 - %>在Ruby on Rails的
- 8. Ruby on Rails的模型
- 9. Ruby on Rails的模型
- 10. Ruby on Rails「什麼是新的?」 - 模態
- 11. Ruby on Rails模型關聯
- 12. Ruby on Rails模型關係
- 13. jQuery跨Ruby on Rails模型
- 14. Ruby on Rails - 模型驗證
- 15. Ruby on Rails模型重用
- 16. Ruby on Rails關係模型
- 17. 使用Ruby on Rails模型
- 18. 比較模型Ruby on Rails
- 19. Ruby on Rails生成模型
- 20. Ruby on Rails動態模型
- 21. ruby on rails - current_user模型
- 22. Ruby on Rails - 模型關係
- 23. Ruby on Rails .where DateTime不尊重'<'
- 24. Ruby on Rails中'self.method_name'和'class << self'的區別
- 25. Ruby中的「<< - 」是什麼意思?
- 26. 鏈接模型在Ruby on Rails的
- 27. 什麼樣的Ruby on Rails模型關聯「簡單」查找?
- 28. 什麼是Ruby on Rails中模型的完全限定名稱?
- 29. Ruby on Rails - 模型上的make方法是什麼?
- 30. RSPEC error:expected#<> got#<>(使用==進行比較) - Ruby on Rails
第一LO確定在'self.groups'的*類型*。然後去找那種類型的文檔。例如,如果'self.groups'是一個數組,那麼請參閱['Array#<<'](http://www.ruby-doc.org/core-1.9.3/Array.html#method-i- 3C-3C)。由於Ruby中的運算符只是方法*,因此此搜索策略適用於任何類型/運算符配對。 – user2864740
本質上它是一種方法,意味着將某物附加到某物上。在ruby中,您可以將項目追加到數組中,將對象添加到對象集合中,將方法追加到類實例中。您可以搜索<< here:http://www.ruby-doc.org/core-2.0.0/ – trh