首页 > 解决方案 > 让我的 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

它仍然无法正常工作......

标签: ruby-on-railsrubycontrollerroutesruby-on-rails-5

解决方案


将 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

休息作为你的问题


推荐阅读