我正在创建下一个和上一个链接,但由于我通过修改to_param方法改变了我的网址外观的方式而遇到了麻烦
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-side所指出的,数据库查找没有改变,因此在尝试以下操作时我收到错误
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"}
答案 0 :(得分:2)
您已将其标记为rails 4,但似乎使用了rails 2语法。
这有用吗?
def previous_animal
self.class.where("id < ?", id).order(created_at: :desc).first
end
答案 1 :(得分:1)
您依赖于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