url_paths - 理解它们的问题

时间:2014-02-20 05:26:40

标签: ruby-on-rails ruby routes

好的,我有点(不是真的)了解url_paths(假设我在这里使用了正确的术语)......

我们在这里使用边缘指南作为示例:http://edgeguides.rubyonrails.org/getting_started.html

这些是列出的一些路径:

1. articles_path 

2. new_article_path

3. article_path(@article)

4. edit_article_path(@article)

5. article_path(article)

6. edit_article_path(article)

3& 3之间有什么不同? 5,甚至1?或4& 6?

为什么一个人传递一个文章对象,另一个不是?通过文章对象,我在括号中表示@article

1,我知道,它列出了所有文章。 2,我知道,它列出了新文章的路径。

我也得到其他人,排序,就像编辑导致编辑页面一样,但我得不到的是(@article)甚至是(article)。而且,偶数(article)通过什么,因为它甚至不是对象实例?

这会让我的困惑清楚吗?

任何解释都会有所帮助!留言Merci!

编辑一个

好的,总结你到目前为止所说的话......

(@article)&之间没有区别(文章)。它们都是参数,无论它是一个实例变量,还是只是将相同的信息传递给辅助函数的变量,即url_path。

而且,url_path是一个辅助函数。

这是对的吗?

2 个答案:

答案 0 :(得分:1)

3. article_path(@article)

5. article_path(article)

以上function没有区别。此函数生成show操作的路径。生成的值看起来像这样,

/article/2

上述功能和

之间存在巨大差异
1. articles_path 

首先,它不需要任何参数。它为index操作生成路径。还有拼写差异。路径看起来像这样。请注意复数。

 /articles

现在,

 4. edit_article_path(@article)
 6. edit_article_path(article)

它为edit操作生成路径。因为,所有编辑网址都是唯一的,这就是你必须传递参数的原因。生成的路径看起来像

/article/5/edit
  

为什么一个人传递一个文章对象,另一个不是?通过文章对象,我的意思是括号中的@article。

因为要进行编辑,您需要主要id来编辑(update)记录。要查看所有记录,您不需要任何密钥。

  

我没有得到的是(@article)甚至(文章)。而且,甚至(文章)通过什么,因为它甚至不是一个对象实例?

以上只是helper函数。您正在传递参数。传递实例变量或仅传递变量并不重要。您也可以传递id而不是完整对象。

上面的答案假设你在谈论Restful(resouces)。当然,如果你自定义它,上面的函数将改变它的返回值。

答案 1 :(得分:1)

有一个名为CRUD的术语。它代表创建,读取,更新,删除。这些是您可以对对象执行的主要操作。括号中的内容称为参数,它们指的是您尝试更改的特定内容。假设您希望用户能够创建,阅读,更新和/或删除评论。要列出所有评论或发表新评论,您无需指定特定评论。如果您想编辑注释,则需要告诉rails要编辑的注释。括号中的东西准确地告诉rails你要编辑的文章。

关于article_path(@article)和article_path(article)之间的区别,您发布的唯一区别是url指向的文章。虽然有两个名为article_path的URL,但它不是使它们唯一的参数,而是http请求方法。如果您键入rake路由,您应该看到如下内容:

article GET        /articles/:id(.:format)         articles#show
        DELETE     /articles/:id(.:format)         articles#destroy

这两个都是project_path,如果你发送方法删除buut,它会破坏文章。如果您发送方法get,它将呈现文章的显示页面。