ruby-on-rails - 让我的 Ruby on Rails 页面在不使用设计的情况下保存用户的电子邮件
问题描述
我正在建立一个单页网站,访问者可以简单地提交他们的电子邮件地址。数据库中的唯一目标是获取电子邮件(没有姓名等)。一开始只有一个页面可见,即主页。如果用户提交已在使用的电子邮件,它会将用户发送到错误页面。如果电子邮件未使用,它会将用户发送到成功页面。
我之前问过一个关于这个的问题,经过大量的评论和反复试验,它似乎有效,然后停止工作。当我使用 Rails C 时,系统中只有一个用户,并且该用户没有电子邮件......
这是我的用户迁移的样子:
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :email
t.timestamps
end
add_index :users, :email, unique: true
end
end
这是我的用户模型的样子:
class User < ApplicationRecord
end
这是 users/new.html.erb 的样子:
<%= form_for @user, as: :post, url: users_path do |f| %>
<div class="wrapper">
<%= f.email_field :email , id: "search", class:"search input" %> <br />
<%= f.submit "yep", class: "submit input" %>
</div>
<% end %>
这是我的用户控制器:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(params[:email])
if @user.save
redirect_to '/users/success'
else
redirect_to '/users/error'
end
end
def show
end
end
这是我的路线:
Rails.application.routes.draw do
root "users#new"
resources :users
end
当我运行代码时,它会呈现主页,但是当我单击提交时,它会在我的浏览器上向我发送一个名为 show.html.erb 的页面,其中包含http://localhost:3000/users/error。控制台中没有保存任何用户。
编辑:我的模型是
class User < ApplicationRecord
validates_uniqueness_of :email
end
它仍然无法正常工作......
解决方案
将 new.html.erb 更改为
<%= form_with(model: @user, local: true) do |f| %>
<div class="wrapper">
<%= f.email_field :email , id: "search", class:"search input" %> <br />
<%= f.submit "yep", class: "submit input" %>
</div>
你的控制器将是
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to user_path(@user), notice: "yeh!!!!"
else
redirect_to new_user_path, notice: "email already registered"
end
end
def show
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(:email)
end
end
添加
<p id="notice"><%= notice %></p>
到布局中的 application.html.erb
休息作为你的问题
推荐阅读
- python - 将特定的 Excel 表单加载到 python 中,向其中添加数据框并以原始格式保存
- python - 解决 Project Euler #5 的最快方法是什么?
- flutter - Text Widget Flutter 显示部分字符并显示省略号
- c# - C# Click 事件打开文件对话框,在 Photoshop 中启动文件并运行一个动作
- python - 如何创建一个库,作为 python 的一组通用导入
- python - AWS S3 多部分无法恢复
- python - 替换嵌套字典值
- android - 如何在片段中保存和恢复recyclerview位置
- c# - deps.json 不存在
- jenkins - Jenkins sshScript 远程:远程传递参数