我花了几个小时试图理解为什么我的Rails 4应用程序似乎不想路由到预期的控制器操作。
总结:我在浏览器URL中尝试的每个操作似乎都会转到索引视图,即使我的路由看起来是正确的。我试图重启服务器等希望可以修复它,但现在我完全迷失了。
例如,如果我尝试访问localhost:3000 / leads #new中的URL,则会收到以下错误消息:
Missing template leads/index, application/index with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :raw, :ruby, :jbuilder, :coffee]}. Searched in: * "/Users/me/Sites/azimuth/app/views"
如果我将index.html.erb的模板添加到app / views / leads文件夹,那么我不会收到错误消息 - 但是每条路径都会转到相同的索引视图 - 引导#show,leads#编辑等 - 所有这些。
这是routes.rb:
Azimuth::Application.routes.draw do
# get 'leads', to: 'leads#new'
resources :applicants
resources :contacts
resources :leads
PagesController.action_methods.each do |action|
get "/#{action}", to: "pages##{action}", as: "#{action}_page"
end
root "pages#home"
end
请注意,注释行 - 获取'引导',以:'引导#new' - 似乎是正确使路由工作的唯一方法。使用资源:潜在客户(我理解这是最佳实践?)让我适合。
这是leads_controller.rb:
class LeadsController < ApplicationController
def new
@lead = Lead.new
end
def create
@lead = Lead.new(lead_params)
if @lead.save
flash[:success] = "Thank you for reaching out! We'll be in touch soon."
redirect_to 'home'
else
render 'new'
end
end
def index
@lead = Lead.all
end
private
def lead_params
params.require(:lead).permit(:first_name, :last_name, :subject, :message)
end
end
Rake路线 - 似乎事情应该正常。 (注意,这只是显示与Leads对象相关的路径)。
Prefix Verb URI Pattern Controller#Action
leads GET /leads(.:format) leads#index
POST /leads(.:format) leads#create
new_lead GET /leads/new(.:format) leads#new
edit_lead GET /leads/:id/edit(.:format) leads#edit
lead GET /leads/:id(.:format) leads#show
PATCH /leads/:id(.:format) leads#update
PUT /leads/:id(.:format) leads#update
DELETE /leads/:id(.:format) leads#destroy
我很困惑,似乎无法追踪正在发生的事情,并希望得到任何帮助!
答案 0 :(得分:1)
如果您错了,请纠正我,但我认为您正在尝试访问错误的网址。您说您在浏览器中访问localhost:3000/leads#new
。该路线的正确网址为localhost:3000/leads/new
您何时在config / routes.rb文件中定义路由,#'s用于让您知道您指定其中一个控制器的方法应该响应此URL。实际的网址不包含#(通常是说)。