繁体   English   中英

为什么用于Devise身份验证的嵌套资源不起作用?

[英]Why are the nested resources for Devise authentication not working?

我的rails应用有几个出租车司机,他们也有几个出租车,它们之间的关系如下:

class Operator < ActiveRecord::Base
    has_many :cabs
end

我希望添加身份验证系统,以便为每个操作员创建管理员。 我正在使用Devise。 由于需要将路径创建为:operator /:operator_id / admins / sign_up,因此生成了Admin模型,如下所示:

rails generate devise Admin

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

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

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

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

  belongs_to :operator
end

class Operator < ActiveRecord::Base
    has_many :admins
end

我还修改了devise / sessions / 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!

问题是我无法提交管理表单。 提交管理员凭据时,表单没有响应。 我要去哪里错了?

您必须在Devise的允许参数中添加:operator_id

在这里看看

本质上,您想在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM