设计路线/:param不工作

时间:2012-06-10 16:36:03

标签: ruby-on-rails activerecord devise

使用设计2.1.0
我正在尝试向new registration页面发送PricingPlan模型 所以在我的路线中我有:

devise_scope :user do
    delete "/logout" => "devise/sessions#destroy"
    get "/login" => "devise/sessions#new"
    get "/signup/:plan" => "devise/registrations#new"
  end

我覆盖了设计注册控制器。在我的routes.rb中使用它来使它工作:

devise_for :users, :controllers => {:registrations => "registrations"}

在我的实际注册控制器中,它覆盖了Devise的控制器,我有:

class RegistrationsController < Devise::RegistrationsController
  view_paths = "app/views/devise"
  def new
    super
    @plan = PricingPlan.find_by_name(params[:plan])
  end

这样默认视图仍然可以设计.... 在new控制器的registration视图中,我称之为:

<h3>You've chosen the <%= @plan.name %> plan.</h3>

我收到了这个错误:

undefined method `name' for nil:NilClass

另外......在我的PricingPlan模型中:

class PricingPlan < ActiveRecord::Base
  has_many :users

在我的User模型中:

class User < ActiveRecord::Base
  belongs_to :pricing_plan

我对铁杆很新。

2 个答案:

答案 0 :(得分:1)

出于某种原因,你的@plan是空的......

尝试更改下面的一行,以确保您找到了计划......

@plan = PricingPlan.find_by_id(1)

如果是这样,你可能试图通过错误的论点找到...你的数据库中是否有一个“计划”栏目?

@plan = PricingPlan.find_by_name(params[:______]) 

答案 1 :(得分:0)

当我在我的注册控制器中执行了raise时,我意识到当我正在点击/注册/:计划它没有达到registrations controller我从设计中覆盖的registration controller {{ 1}}。
我找出原因:
因为我已经制作了自己的控制器,所以范围不再设计范围了...

所以这是错误

get "/signup/:plan" => "devise/registrations#new"

然而正确

get "/signup/:plan" => "registrations#new"

所以我的部分路线看起来像这样:

  devise_scope :user do
    delete "/logout" => "devise/sessions#destroy"
    get "/login" => "devise/sessions#new"
    get "/signup/:plan" => "registrations#new"
  end

代码中的其他所有内容都保持不变。 感谢@gabrielhilal让我追踪控制器。