Rails路由不符合预期的控制器操作

时间:2014-08-05 15:17:47

标签: ruby-on-rails-4 routing routes rails-routing

我花了几个小时试图理解为什么我的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

我很困惑,似乎无法追踪正在发生的事情,并希望得到任何帮助!

1 个答案:

答案 0 :(得分:1)

如果您错了,请纠正我,但我认为您正在尝试访问错误的网址。您说您在浏览器中访问localhost:3000/leads#new。该路线的正确网址为localhost:3000/leads/new

您何时在config / routes.rb文件中定义路由,#'s用于让您知道您指定其中一个控制器的方法应该响应此URL。实际的网址不包含#(通常是说)。