Ruby on rails 在Rails中标识对象-有时使用:id,有时使用对象本身?

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

关于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 '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会进行一系列调用,这绝对值得花一点时间来遵循这些调用,因为它可以解开许多您最初认为非常复杂的东西的神秘面纱。

太好了,非常感谢您的详细解释。我现在就检查文件和所有东西