【问题标题】:How do I restrict the number of characters returned from a query using Sequel and Ruby?如何使用 Sequel 和 Ruby 限制从查询返回的字符数?
【发布时间】:2012-01-18 18:59:00
【问题描述】:

我的模型是Article,我只想显示文章正文的一个sn-p,以预览这篇特定的文章。

我将如何使用 Sequel 做到这一点?

我认为它可能使用了limit,但这只是限制了从数据库返回的记录数。

理想情况下,我想做这样的事情:Article.first.limit(40) 其中 40 是前 40 个字符。

我知道limit 不起作用,但我只是用它作为示例来说明我在寻找什么。


编辑 1:

我正在使用 Sinatra。我想限制返回的值,但从视图而不是路由文件。

我在路由文件中做了这样的事情:

@section = HelpSections.filter(:type => 'a').order(:sort, :name)

这给了我a 类型的所有部分的列表。

然后,我要写一篇文章:

@section.each do |article|
     article.question.each do |title|
         title.name[0..9]
     end
end

基于这种情况,我要做的是限制返回的'name'属性的大小。

但是,当我这样做时,我得到了这个错误:

undefined method '[]' for nil:NilClass

我该如何处理,以便限制name 属性的大小?

【问题讨论】:

  • 问题是 title.name 返回 nil(无)。你确定你不是这个意思吗:@section.each do |article|article.name[0..9]
  • 对不起,我添加了article.question.each do |title|...如果它正在解析文章中的字符,它不应该返回nil。如果我这样做 article.name 它会返回完整的值(很长)。当我执行article.name[0..9] 时,它会抱怨,这让我相信它可能正在寻找名称中的记录,而不是解析字符......如果这有意义的话。
  • 试试article.name.to_s[0..9]
  • 完美……这正是我所需要的。这样可行。谢谢!!!
  • 您可以根据需要更新您的答案,以更准确地反映更新后的问题。

标签: ruby sinatra sequel


【解决方案1】:

你就不能这样吗?:

Article.first[:body][0..39]

如果你真的需要通过 SQL 来做,你可以这样做:

Article.select {|a| a.substr(:body, 1, 40) }

(您可能必须使用.substring 代替substr,具体取决于您的数据库)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-08-12
  • 1970-01-01
  • 2020-02-09
  • 2018-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多