我正在学习Rails。很多惯例都很有意义。映射到控制器操作的代码约定是奇数:
//code url controller action
tweets_path /tweets/ def index
tweet /tweet/ID def show
new_tweet_path /tweets/new def new
edit_tweet_path(tweet) /tweets/ID/edit def edit
为什么自动生成的方法助手不是以与控制器操作相同的对称方式完成的?例如:
//code
tweet_index
tweet_show(tweet)
tweet_new
tweet_edit(tweet)
我很新,我确信这是一个很好的理由,我还不知道:)
答案 0 :(得分:1)
这里有两个不对称。
第一个是复数与单数路线助手。为什么有些助手tweets_*
是助手,有些是tweet_*
助手?
答案是某些资源路由是成员路由,而其他路由是集合路由。成员路由与资源实例有关,而集合路由与作为组的资源的所有实例有关(除非资源是单数的,在这种情况下没有收集路由)。索引操作是集合路由,show动作是成员路由。
您可以声明自己的成员和收集路线,如下所示:
# routes.rb
resources :tweets do
member do
get :duplicate
end
collection do
get :summarize
end
end
除了标准的助手之外,这将创建两个助手。请注意,Rails将创建适当的单数或复数的路径助手。
summarize_tweets_path
助手duplicate_tweet_path
帮助官方文档为here。
第二种不对称性是,许多内置资源操作都会将操作排除在帮助程序之外。我想这可能是为了简洁,但我真的不知道。
修改强>
在考虑之后,由于Rails和REST中存在路径重载,因此删除了操作名称。 '/ tweet /:id'路径可以是显示,更新或删除操作,具体取决于HTTP谓词。基本上,路径会告诉您正在操作的内容,而不是采取的操作。
答案 1 :(得分:1)
辅助方法的生成方式使它们更像句子的一部分,使它们更具可读性。说“创建新推文的链接”听起来比“创建新推文链接”听起来更好。在命名任何自定义动作时,记住这一点也很有帮助,使用符合句子的名称可以更容易理解和记忆,因为这是我们学会说话的方式。
答案 2 :(得分:0)
不对称的一个原因是映射依赖于HTTP操作。例如,GET to / tweets映射到索引操作,但POST到/ tweets映射到create操作。