我刚刚开始学习Rails,目前令我困惑的一件事是在 has_many 方法中使用lambdas。我不明白的是lambda体内的争论。我解释这个的方式是,对于第一个参数, order 是一个方法,其中的参数是 published_at 。但 published_at 是另一种以DESC为参数的方法吗?这同样适用于原始方法参数
的第二个参数class User < ActiveRecord::Base
has_one :profile
has_many :articles, -> { order('published_at DESC, title ASC') }
end
答案 0 :(得分:1)
这一行:
has_many :articles, -> { order('published_at DESC, title ASC') }
has_many
定义用户和文章记录之间的关系(在数据库中)。
lambda
lambda部分正在调用.order()
method from ActiveRecord。传递给.order()
的参数是用SQL语法编写的字符串。 (在Rails 4中你可以做.order(published_at: :desc, title: :asc)
)。
总体而言,此用户has_many
正在使用相关文章的特定订单。
所以当你打电话时:
User.find(params[:id]).articles
将返回所有文章并使用参数published_at DESC, title ASC
希望这有帮助!
答案 1 :(得分:0)
这是将选项的哈希值传递给has_many
:
http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many
在这种情况下,选项哈希包括order
方法:
http://api.rubyonrails.org/classes/ActiveRecord/QueryMethods.html#method-i-order
定义的 order
接受一个数组参数,该字符串作为字符串展开为join
并带有默认分隔符,因此您可以指定多个列:
http://docs.ruby-doc.com/docs/ProgrammingRuby/html/ref_c_array.html#Array._st