首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改to_param时的前一个和下一个链接

更改to_param时的前一个和下一个链接
EN

Stack Overflow用户
提问于 2014-10-02 10:54:30
回答 2查看 76关注 0票数 0

我正在创建下一个和以前的链接,但是遇到了一些麻烦,因为我通过修改to_param方法改变了url的外观:

代码语言:javascript
复制
 def slug
  name.downcase.gsub(" ", "-")  
 end

 # URL will now show /id-name
 def to_param
  "#{self.id}-#{slug}"
 end

因此,我获取前一个链接的方法如下所示:

代码语言:javascript
复制
def previous_animal
 self.class.first(:conditions => ["id-name < ?", "what-to-put-here"], :order => "created_at desc")
end

我是否正确地认为,如果我只是使用一个id,它将是:

代码语言:javascript
复制
def previous_animal
 self.class.first(:conditions => ["id < ?", id], :order => "created_at desc")
end

如何传递新的id格式?

编辑

正如D端所指出的,数据库查找没有改变,所以在尝试以下操作时,我会得到一个错误:

代码语言:javascript
复制
def previous_animal
 self.class.first(:conditions => ["id < ?", id], :order => "created_at desc")
end

视图

代码语言:javascript
复制
<%= link_to(@animal.previous_animal) %>

错误:

代码语言:javascript
复制
invalid value for Integer(): "{:conditions=>[\"id < ?\""

因此,link_to需要一个整数,但是传递的内容如下所示:

代码语言:javascript
复制
{"id"=>"27-clawd"}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-02 11:09:52

您依赖于idcreated_at是同步的(假设在另一个模型之后创建的模型总是具有较高的ID。这通常是正确的,但取决于数据库和危险的假设(例如,可以手动更改ID或created_at )。

所以我会做这样的事:

代码语言:javascript
复制
def previous_animal
  animal = self.class.order('created_at desc').where('created_at < ?', self.created_at)
  animal.first if animal
end
票数 1
EN

Stack Overflow用户

发布于 2014-10-02 11:04:30

您已经将其标记为rails 4,但似乎使用的是rails 2语法。

这行得通吗?

代码语言:javascript
复制
def previous_animal
  self.class.where("id < ?", id).order(created_at: :desc).first
end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26159332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档