我正在创建下一个和以前的链接,但是遇到了一些麻烦,因为我通过修改to_param方法改变了url的外观:
def slug
name.downcase.gsub(" ", "-")
end
# URL will now show /id-name
def to_param
"#{self.id}-#{slug}"
end因此,我获取前一个链接的方法如下所示:
def previous_animal
self.class.first(:conditions => ["id-name < ?", "what-to-put-here"], :order => "created_at desc")
end我是否正确地认为,如果我只是使用一个id,它将是:
def previous_animal
self.class.first(:conditions => ["id < ?", id], :order => "created_at desc")
end如何传递新的id格式?
编辑
正如D端所指出的,数据库查找没有改变,所以在尝试以下操作时,我会得到一个错误:
def previous_animal
self.class.first(:conditions => ["id < ?", id], :order => "created_at desc")
end视图
<%= link_to(@animal.previous_animal) %>错误:
invalid value for Integer(): "{:conditions=>[\"id < ?\""因此,link_to需要一个整数,但是传递的内容如下所示:
{"id"=>"27-clawd"}发布于 2014-10-02 11:09:52
您依赖于id和created_at是同步的(假设在另一个模型之后创建的模型总是具有较高的ID。这通常是正确的,但取决于数据库和危险的假设(例如,可以手动更改ID或created_at )。
所以我会做这样的事:
def previous_animal
animal = self.class.order('created_at desc').where('created_at < ?', self.created_at)
animal.first if animal
end发布于 2014-10-02 11:04:30
您已经将其标记为rails 4,但似乎使用的是rails 2语法。
这行得通吗?
def previous_animal
self.class.where("id < ?", id).order(created_at: :desc).first
endhttps://stackoverflow.com/questions/26159332
复制相似问题