gpt4 book ai didi

ruby-on-rails - Rails Devise - 多种模型

转载 作者:太空宇宙 更新时间:2023-11-03 16:21:14 25 4
gpt4 key购买 nike

我需要设计方面的帮助以及使用多个模型的选项。

目前我有一个 User 模型和一个位于命名空间内的 Client 模型:

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :recoverable, :registerable, :rememberable, :trackable, :validatable
end

class Test::Client < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end

如您所见,我在两个模型中都加入了设计。就像它在文档中一样..

那么看看我的路线:

devise_for :users, controllers: {passwords: 'passwords',
sessions: 'sessions'}

devise_for :clients, class_name: 'Test::Client', controllers: {sessions: 'test/sessions'}

我现在的问题是,当我为我的Client 模型创建登录表单时:

<%= form_for(resource, as: resource_name, url: client_session_path(resource_name), html: {class: ''}) do |f| %>
<% end %>

它有以下网址:/clients/sign_in.client

这个.client是什么?它让我疯狂。当您需要更多信息时,请告诉我..

编辑 1:

我现在编辑我的模型结构。

class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :recoverable, :registerable, :rememberable, :trackable, :validatable
end

class Test::Client < User
# some Client only functions
end

所以作为普通用户的登录是有效的。但是客户端登录仍然没有。在我看来,我这样做了:

<%= form_for(Test::Client.new, as: :client, url: session_path(:client)

当我输入我的凭据时,我被重定向到“/users/sign_in”,但没有发生其他事情。在我的日志中,我得到了一个过滤器条目:

Filter chain halted as :require_no_authentication rendered or redirected

最佳答案

原问题的答案
在我的应用程序中

<%= user_session_path(resource_name) %>
# Output
/users/sign_in.user
# In this example; the `resource_name` is redundant

<%= user_session_path %>
# no need to pass arg is your are surely gonna use `user` as the resource
# Output
/users/sign_in

<%= session_path(:user) %>
# Output
/users/sign_in

在devise中定义了一个辅助方法来根据资源确定sign_in_url;

What is this .client? Ans: client is the name of the resource you defined for devise; in your case there are two resources;

如果您要为不同的资源使用不同的 View 模板,请使用以下内容;

<%= form_for(resource, as: resource_name, url: client_session_path, html: {class: ''}) do |f| %>
<% end %>

如果想共享 View 模板;使用

<%= form_for(resource, as: resource_name, url: session_path(resource_name), html: {class: ''}) do |f| %>
<% end %>

仅供引用:

[8] pry(main)> app.members_path
=> "/members"
[9] pry(main)> app.leads_path(2)
=> "/leads.2"
[10] pry(main)> app.lead_path(2)
=> "/leads/2"

关于ruby-on-rails - Rails Devise - 多种模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33173722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com