0

使用设计 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"}

在我覆盖设计控制器的实际注册控制器中,我有:

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

我对rails比较陌生。

4

2 回答 2

1

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

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

@plan = PricingPlan.find_by_id(1)

如果是这样,您可能试图通过错误的论点来查找...您的数据库中是否有“计划”列?

@plan = PricingPlan.find_by_name(params[:______]) 
于 2012-06-10T16:51:20.810 回答
0

当我raise在我的注册控制器中执行 a 时,我意识到当我点击 /signup/:plan 时,它并没有达到registrations controller我从 devises 获得的 overode registration controller
我找出原因:
因为我已经制作了自己的控制器,所以范围不再设计范围......

所以这是错误的:

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 让我找到控制器。

于 2012-06-11T02:07:16.847 回答