好的,我有点(不是真的)了解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是一个辅助函数。
这是对的吗?
答案 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,它将呈现文章的显示页面。