2014-11-24 48 views
0

我的Rails应用程序有一些出租车运营商和他们有一些出租车,他们的关系如下:为什么Devise身份验证的嵌套资源不起作用?

class Operator < ActiveRecord::Base 
    has_many :cabs 
end 

我要补充的认证体系,以创建为每个操作员管理员。我正在使用Devise。因为我需要创建路径:运营商/:operator_id /管理员/ sign_up,我产生的管理模式,如:

rails generate devise Admin 

然后我修改了路线,以获得上述路径:

scope "operators/:operator_id" do 
    devise_for :admins 
end 

运行耙路线表明我正在获取所需的网址。我还修改了模型:

class Admin < ActiveRecord::Base 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    belongs_to :operator 
end 

class Operator < ActiveRecord::Base 
    has_many :admins 
end 

我还修改了色器件/会话/ new.html.irb包括用于operator_id一个隐藏字段:

H2>登录

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %></div> 

    <div><%= f.label :password %><br /> 
    <%= f.password_field :password, autocomplete: "off" %></div> 

    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> <%= f.label :remember_me %></div> 
    <% end -%> 

    <% f.hidden_field :operator_id, :value => params[:operator_id] %> 

    <div><%= f.submit "Log in" %></div> 
<% end %> 

<%= render "devise/shared/links" %> 

最后,为了在访问驾驶室详细信息之前验证管理员身份,我向cabs_controller添加了以下内容:

before_filter:authenticate_admin!

问题是我无法提交管理员表单。当我提交管理员凭证时,表单不会回应。我哪里错了?

回答

0

您必须添加:operator_id制定的允许参数

Take a look here

从本质上讲,你想要去与application_controller.rb如下:

before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 

    def configure_permitted_parameters 
     devise_parameter_sanitizer.for(:sign_up) do |u| 
     u.permit(:email, :password, :password_confirmation, :operator_id) #add :operator_id 
     end 
    end 
+0

依然不工作:( – 2014-11-24 13:52:31

+0

重新启动服务器....它现在似乎工作...但一个新的管理员没有得到与它关联的operator_id – 2014-11-24 14:39:41

+0

这意味着管理员可以访问另一个驾驶室操作员的驾驶室,我绝对买不起! – 2014-11-24 14:57:21