在我的routes.rb中我有以下内容:
resources :message_threads
Run Code Online (Sandbox Code Playgroud)
我打电话的时候:
message_threads_path(1)
Run Code Online (Sandbox Code Playgroud)
我明白了:
/message_threads.1
Run Code Online (Sandbox Code Playgroud)
为什么是这样?我的其他资源运作正常.我没有正确地复数这个或什么?
我正在使用路径帮助器方法在link_to中生成URL,并且它们返回如下格式化的URL:
http://localhost:3000/tweets.4
Run Code Online (Sandbox Code Playgroud)
当我期待它们像这样形成时:
http://localhost:3000/tweets/4
Run Code Online (Sandbox Code Playgroud)
请注意它是如何使用点作为分隔符而不是预期的正斜杠.顶部链接无法解析为正确的视图,它只是重新加载/ tweets视图.当我手动将URL编辑为底部时,它会打开正确的/ tweets/show /.
我在网上研究中发现的最接近的事情是人们用错误的嵌套路由语句遇到了这个问题 - 但我不认为我在这里做过.
我将不胜感激任何人都能提供的任何帮助或指示!
以下是相关的源文件和版本信息:
鸣叫/ index.html.erb
<h1>Listing tweets</h1>
<% @tweets.each do |tweet| %>
<div>
<!-- creates path in format of /tweets.2 -->
<div><%= link_to tweet.status, tweets_path(tweet) %></div>
<!-- creates path in the format of /user.1 -->
<div><%= link_to tweet.user.name, users_path(tweet.user) %></div>
</div>
<% end %>
Run Code Online (Sandbox Code Playgroud)
tweets_controller.rb
class TweetsController < ApplicationController
def index
@tweets = Tweet.all
end
def show
@tweet = Tweet.find(params[:id])
end
def new
@tweet = Tweet.new
end
def create
@tweet …Run Code Online (Sandbox Code Playgroud) 更新#3 ...固定!解决方案是将新的名称空间代码 ( get 'dash', to: 'dashes#show') 移至该root "campaigns#index"条目正上方的 routes.rb 文件底部。
更新#2 ...它不是复数形式,因为它被称为单数,如下所示,删除命名路由会自动更正所有问题。
更新 #1 ... 找到了为什么没有人在 URL 中列出句点代替斜杠的原因 ... 它是 unix 名词,而不是英语 ... IE:如果你搜索 'dot' 代替 '.',那么你得到各种答案。
我对这个感到困惑......前几天做了我的第一个命名路由,一切看起来都很棒,直到突然出现从命名路由调用时的编辑页面没有正确更新,出现错误......
No route matches [PATCH] "/dash.6"
Run Code Online (Sandbox Code Playgroud)
删除命名路线使我回到正常路线和所有选项工作。我找不到提及使用 '.' 的路由。而不是'\',所以我迷路了。下面是我的路由文件,然后是来自 rails 服务器的路由结果......
Rails.application.routes.draw do
devise_for :users, controllers: { sessions: 'users/registrations' }
# map.login '/login', :controller => 'sessions', :action => 'new' ## 3rd try
# get '/dash', :controller => 'dashes', :action => 'show' ## 2nd try
# get 'dash', to: 'dashes#show' …Run Code Online (Sandbox Code Playgroud)