gpt4 book ai didi

ruby-on-rails - 如何使用外部 Controller 创建新的设计用户

转载 作者:搜寻专家 更新时间:2023-10-30 23:40:09 25 4
gpt4 key购买 nike

几个小时以来我一直在尝试这个,但无济于事,所以,最后向你们寻求帮助。

Scenario

我有两个设计模型,即 College 和 Manager。它们都工作正常,但我想要实现的是 College 应该能够创建或删除一个 Manager。为此,我创建了一个 Codashboard controller#view,只有在 College 登录后才能访问它。这个 controller#view 对有一个表单,用于提交经理电子邮件和密码并提交到数据库。

Problem

每当我提交我的表单时,我都不会收到任何错误,但更改不会提交到数据库。

Details

从终端提取

Started POST "/codashboard" for 127.0.0.1 at 2016-03-14 04:59:41 +0530
Processing by CodashboardController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"P85GD7Wnt1RYNDgxxMxrSH6tUzW/PUBvqTXs8lYHY+HkvRXnq3s/IQL50SyMeDI1xXlalztTMbTZDNcPsXuckw==", "manager"=>{"email"=>"manager11@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"}
(0.1ms) BEGIN
(0.1ms) ROLLBACK
Redirected to http://localhost:3000/codashboard
Completed 302 Found in 4ms (ActiveRecord: 0.3ms)

对应 View

<%= form_for @addmanager, url: {action: "create"} do |f| %>
<div><%= f.label :email %><br />
<%= f.email_field :email %></div>

<div><%= f.label :password %><br />
<%= f.password_field :password %></div>

<div><%= f.label :password_confirmation %><br />
<%= f.password_field :password_confirmation %></div>

<div><%= f.submit "Sign up" %></div>
<% end %>

对应 Controller

class CodashboardController < ApplicationController
def index
if college_signed_in?
@managers = College.find_by_id(current_college.id).managers
@addmanager = Manager.create(params[:addmanager])
end
end

def new
@addmanager = Manager.new
end

def create
Manager.create(params[:addmanager])
redirect_to codashboard_index_path
end

def addmanager
@addmanager = Manager.new(:email => "manager8@gmail.com", :password => "qwertyuiop")
@addmanager.save
redirect_to codashboard_index_path
end
end

注意:我尝试使用默认设计表单,但它总是在创建我不想要的新用户后登录。

注意 2:方法 addmanager 工作正常,每当调用时都会在数据库中添加一个条目。所以,我的模型没有问题。

请指出可能是什么问题

最佳答案

我强烈怀疑验证错误,你没有看到任何错误,因为你在失败和成功的验证中都进行了重定向,这里有两个选项:

快速而肮脏的方法,将 Manager.create 更改为 Manager.create! 如果验证失败,这将抛出错误。

做得很好,并在验证失败时重新呈现表单并显示错误消息:

class CodashboardController < ApplicationController

def create
@addmanager = Manager.new(addmanager_params)

if @addmanager.save
redirect_to codashboard_index_path
else
render :new
end
end

private

def addmanager_params
require(:addmanager).permit(:email, :password, :password_confirmation)
end
end

我还添加了强参数以确保只能设置允许的属性。

更新:

真正的错误是,Rails 从传递给它的模型中推断出属性键(即 @addmanager.class,即 Manager),因此您的响应在您的日志显示,其键值为“manager”:

"manager"=>{"email"=>"manager11@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}

但您希望它被键入为“addmanager”,如下所示:

"addmanager"=>{"email"=>"manager11@gmail.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}

要强制执行此操作,您可以使用 as: 选项更改 form_for 表单构建器以使用别名:

<%= form_for @addmanager, as: :addmanager, url: {action: "create"} do |f| %>

关于ruby-on-rails - 如何使用外部 Controller 创建新的设计用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35977312/

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