我的控制器正在使用默认的RESTful路由来创建,添加,编辑等
我想将默认:id
更改为使用:guuid
。所以我做的是:
# routes.rb
resources :posts
# Post Model
class Post < ActiveRecord::Base
def to_param # overridden
guuid
end
end
这可行,但我修改过的REST控制器代码有类似的东西
def show
@post = Post.find_by_guuid(params[:id])
@title = "Review"
respond_to do |format|
format.html # show.html.erb
end
end
当我看到这段代码时..
Post.find_by_guuid(params[:id])
这似乎不对,但它确实有效。 我不明白为什么我不能这样写出来:
Post.find_by_guuid(params[:guuid])
为什么我不使用时仍需要传递params[:id]
?
寻找关于我的方法是否正确或需要考虑的其他事项的反馈
尽管它有效,但并不总是意味着它是正确的。
答案 0 :(得分:2)
在控制台中键入rake routes
,然后检查路由的输出。你会在其中一些片段中看到片段':id',这就是params[:id]
来自的地方。这是一个rails约定:当您在路由中使用resources
时,该参数名为id
。我不知道你是否可以改变它(同时保留resources
;否则你可以选择匹配的规则),但你不应该这样做:即使看起来不是很逻辑,它实际上也有意义,一旦了解rails路由的工作原理。