Ruby on rails 如何按属性长度对ActiveRecords列表进行排序?
我有一个这样的物体:Ruby on rails 如何按属性长度对ActiveRecords列表进行排序?,ruby-on-rails,ruby,ruby-on-rails-3,activerecord,rails-postgresql,Ruby On Rails,Ruby,Ruby On Rails 3,Activerecord,Rails Postgresql,我有一个这样的物体: irb(main):076:0> hints = Hint.where("sentence LIKE ?","%你%") Hint Load (4.0ms) SELECT "hints".* FROM "hints" WHERE (sentence LIKE '%你%') [ [0] #<Hint:0x007fb99c6520b8> { :id => 214, :sentence =&
irb(main):076:0> hints = Hint.where("sentence LIKE ?","%你%")
Hint Load (4.0ms) SELECT "hints".* FROM "hints" WHERE (sentence LIKE '%你%')
[
[0] #<Hint:0x007fb99c6520b8> {
:id => 214,
:sentence => "我为你们立下模范,我向你们怎样做,你们也该照样做。",
:user => nil,
:learned => nil,
:created_at => Sun, 06 Jan 2013 18:14:33 UTC +00:00,
:updated_at => Sun, 06 Jan 2013 18:14:33 UTC +00:00
},
[1] #<Hint:0x007fb99c659a70> {
:id => 229,
:sentence => "他快要完成地上的传道工作时,曾向耶和华祷告说“我已经使他们使徒认识你的名,以后还要使他们认识”。",
:user => nil,
:learned => nil,
:created_at => Sun, 06 Jan 2013 18:43:23 UTC +00:00,
:updated_at => Sun, 06 Jan 2013 18:43:23 UTC +00:00
},
[2] #<Hint:0x007fb99c659458> {
:id => 234,
:sentence => "你的王到你这里来了。",
:user => nil,
:learned => nil,
:created_at => Sun, 06 Jan 2013 18:48:12 UTC +00:00,
:updated_at => Sun, 06 Jan 2013 18:48:12 UTC +00:00
}
]
irb(main):077:0> hints.class
ActiveRecord::Relation < Object
如何按句子长度排序
我的最终目标是,当有人在课上点击一个汉字时,他们会看到几个最短的例句,作为对汉字含义的提示
我正在使用PostgreSQL。我认为最简单的方法是从数据库端进行排序,例如MySQL:
order by LENGTH(sentence) desc
甚至你也可以为此写一个范围
因为正如我所看到的,如果您试图在DB select之后对其进行排序,那么这将是另一个不必要的循环。试试看
hints = Hint.find_by_sql("SELECT * FROM hints WHERE sentence LIKE('%你%') ORDER BY LENGTH(sentence) ASC")
这类:
hints = hints.sort { |x,y| x.sentence.length <=> y.sentence.length }
会做好这项工作的Sameera207有正确的想法, 但答案是ruby代码
Hint.where("sentence LIKE ?","%你%").order("LENGTH(sentence) ASC")
这会解决你的问题
也许你想要这样的方法
def shortest_example(word)
Hint.where("sentence LIKE ?", "%#{word}%").order("LENGTH(sentence) ASC").first
end
我无法获取。以便在rails查询中工作。我需要使用。重新排序,而这是为模型的孩子 例如
如果您想要SQL解决方案,它可能必须是特定于数据库的;那么,您使用的是什么数据库呢?irbmain:091:0>tipts.find_by_sqlSELECT*FROM hints WHERE-that-LIKE%你% ORDER BY Length语句描述给了我名称错误:未定义的局部变量或方法`你' 对于main:Object和Hint.find_by_sqlSELECT*FROM hints WHERE that-LIKE%你% ORDER BY LENGTHSEQUENCE DESC给出了相同的错误。请用一个英文单词试试,看看会发生什么,可能是我们需要解决的编码问题。我正在IRB上本地尝试,但没有收到错误:Hint.find_BY_sqlSELECT*FROM hints,其中的句子像'%你%' ORDER BY LENGTHSENTURE ASCOP没有使用MySQL,但这对PostgreSQL也是有效的。我想创建一个jquery.onclick函数,它将使用“this”查询数据库,然后使用freeow或meow以类似咆哮的通知方式显示结果。我是rails新手,但对ajax更是新手。你能告诉我让ajax提取方法提取的数据的正确方向吗?即使只是帮助我知道在谷歌上搜索什么也会有所帮助。我尝试过搜索,但我不知道正确的术语。听起来您想在word控制器上添加一个动作示例,它接受一个单词并返回该示例。您应该查看link_to:remote=>true。我建议你也读一本书,比如Rails 3 in Action。
doc_glossaries = doc.doc_glossaries.where(active: true, trashed: false).reorder("LENGTH(src) DESC")