2014-11-24 25 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