Rails模型依赖关系和Lambda

时间:2014-08-08 19:19:40

标签: ruby-on-rails ruby lambda

我刚刚开始学习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

2 个答案:

答案 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