Ruby on rails 在Rails中标识对象-有时使用:id,有时使用对象本身?
关于Ruby on rails的另一个相当普遍的问题是:Ruby on rails 在Rails中标识对象-有时使用:id,有时使用对象本身?,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,关于Ruby on rails的另一个相当普遍的问题是: def destroy @post = Post.find(params[:post_id]) @comment = @post.comments.find(params[:id]) @comment.destroy redirect_to post_path(@post) end 查看find方法,我用参数id调用它(我想是通过REST请求传入的) 现在在这里 <%= link_to 'Des
def destroy
@post = Post.find(params[:post_id])
@comment = @post.comments.find(params[:id])
@comment.destroy
redirect_to post_path(@post)
end
查看find方法,我用参数id调用它(我想是通过REST请求传入的)
现在在这里
<%= link_to 'Destroy Comment', [comment.post, comment],
method: :delete,
data:{confirm: 'Are you sure?' } %>
我用comment.post+comment的id组合路由。对我来说,comment.post.id和comment.id似乎是隐式给出的(magic^^),这对我来说很好,但我尝试对其进行编码,我得到了一个异常
为什么是这样?有人能告诉我文档中正确的部分描述了这种行为吗?我对ruby做的所有这些智能和自动的事情都很迷茫
谢谢 你混淆了两件截然不同的事情 这是向ActiveRecord发出请求,以查找具有匹配的
id
的Post
实例:
Post.find(id)
下一行使用内置的UrlHelper
在视图中为给定的资源构建HTML链接
:
link_to 'Link Text', resource
在特定情况下,将:方法指定为:delete
。通过routes.rb
文件中的配置,rails然后将DELETE
请求[POST,Comment]
嵌套资源映射到posts\u Comment\u路径
,并为Comment.POST
传递POST\u id
和Comment
传递id
如果你仔细阅读一下Rails的源代码,这就没那么神奇了。指向
文档的链接说明第二个参数可以接受url\u为
接受的任何有效选项。()
文档()的url\u说明:
<%= url_for(@workshop) %>
# calls @workshop.to_param which by default returns the id
# => /workshops/5
# to_param can be re-defined in a model to provide different URL names:
# => /workshops/1-workshop-name
#调用@workshop.to_param,默认情况下返回id
#=>/workshops/5
#to_参数可以在模型中重新定义,以提供不同的URL名称:
#=>/workshop/1-workshop-name
所以,其实并不那么神奇。当您调用类似于link\u to
的东西时,rails会进行一系列调用,这绝对值得花一点时间来遵循这些调用,因为它可以解开许多您最初认为非常复杂的东西的神秘面纱。太好了,非常感谢您的详细解释。我现在就检查文件和所有东西