我会直截了当地说我对网站设计和开发的概念很新。现在,我遇到了一个我似乎无法找到解决方案的问题。
我正在尝试扩展到mhartl的Ruby on Rails教程。我创建了自己的示例应用程序,但添加了一个。在注册表单上,我有两个单选按钮来确定帐户类型,可以是服务提供商或财产持有人。
我模特的一些背景知识。我有一个基本用户控制器和模型。我的属性持有者和服务提供者模型使用单表继承从基本用户模型继承。
如果我提供了所有正确的详细信息并提交了有效的注册,那么一切都很好,它会将我重定向到显示页面。
当我注册不正确但是其中一个帐户类型的单选按钮已关闭时,会出现问题。第一次单击“提交”时,将显示错误标签,并且URL会从/ signup更改为/ base_users。如果我再次单击“提交”,则会收到错误消息,其中显示" param丢失或值为空:base_user"
以下是我的一些代码。
从我在终端收到的调试消息判断,我觉得它与我的应用程序向/ service_providers而不是/ base_users提交发布请求有关,但我不确定如何解决这个问题,或者如果它甚至是根本问题。你能帮助我解决我的任何误解并引导我朝着正确的方向前进吗?非常感谢。
添加/视图/ base_users / new.html.erb
<% provide(:title, 'Sign up') %>
<h1>Sign up</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_for(@base_user) do |f| %>
<%= render 'shared/error_messages' %>
<%= f.label :name %>
<%= f.text_field :name, class: 'form-control' %>
<%= f.label :email %>
<%= f.email_field :email, class: 'form-control' %>
<%= f.label :password %>
<%= f.password_field :password, class: 'form-control' %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation, class: 'form-control' %>
<label>
<%= f.radio_button :type, "PropertyHolder", label: "test", class: 'form-control' %>Property Holder
</label>
<label>
<%= f.radio_button :type, "ServiceProvider", label: "test", class: 'form-control' %>Service Provider
</label>
<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
应用程序/控制器/ base_users_controller.rb
class BaseUsersController < ApplicationController
def index
@base_users = BaseUser.where(:type => params[:type])
end
def show
@base_user = BaseUser.find(params[:id])
end
def new
@base_user = BaseUser.new
@base_user.type = params[:type]
end
def create
@base_user = BaseUser.new(user_params)
if @base_user.valid?
if @base_user.type == "PropertyHolder"
@property_holder = @base_user
if @property_holder.save
flash[:success] = "Welcome to the Sample App!"
redirect_to @property_holder
else
render 'new'
end
elsif @base_user.type == "ServiceProvider"
@service_provider = @base_user
if @service_provider.save
flash[:success] = "Welcome to the Sample App!"
redirect_to @service_provider
else
render 'new'
end
else
render 'new'
end
else
render 'new'
end
end
private
def user_params
params.require(:base_user).permit(:name, :email, :password,
:password_confirmation, :type)
end
end
我的路线文件中与注册相关的重要部分如下:
get 'signup' => 'base_users#new'
resources :base_users
resources :property_holders, :controller => 'base_users', :type => "PropertyHolder"
resources :service_providers, :controller => 'base_users', :type => "ServiceProvider"
答案 0 :(得分:0)
我发现了为什么它不起作用,当我重新渲染new.html.erb时,它将@base_user作为PropertyHolder / ServiceProvider进行投射。我只需要将@base_user显式地转换为base_user。
/views/base_user/new.html.erb
<%= form_for(@base_user, as: :base_user) do |f| %>