Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何按属性长度对ActiveRecords列表进行排序?_Ruby On Rails_Ruby_Ruby On Rails 3_Activerecord_Rails Postgresql - Fatal编程技术网

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")