使用设计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
我对铁杆很新。
答案 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让我追踪控制器。