访问 URL localhost:3000/buyers/sign_up?email=abc%40abc.com
时,会显示注册表单,但电子邮件字段保持为空,并且不会自动填写 abc@ abc.com。
这可能与实现的单表继承 (STI) 有关吗? -> Buyer 继承自 User。
routes.rb
devise_for :users, :controller => {:sessions => 'sessions'}, :skip => :registrations do
delete '/logout', :to => 'sessions#destroy', :as => :destroy_user_session
get '/login', :to => 'sessions#new', :as => :new_user_session
post '/login', :to => 'sessions#create', :as => :new_user_session
end
devise_for :sellers, :skip => :sessions
devise_for :buyers, :skip => :sessions
resources :users
devise/registrations/new.html.erb
<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= devise_error_messages! %>
<div><%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %></div>
<div><%= f.submit "Sign up" %></div>
<% end %>
用户 Controller
class UsersController < ApplicationController
before_action :set_user, only: [:show, :edit, :update, :destroy]
def create
@user = User.new(user_params)
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'User was successfully created.' }
format.json { render action: 'show', status: :created, location: @user }
else
format.html { render action: 'new' }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_user
@user = User.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def user_params
params.require(:user).permit(:first_name, :last_name, :name, :type, :email)
end
end
最佳答案
刚找到答案。 只需要在表单中添加值+检查电子邮件参数是否存在的条件:
<%= f.email_field :email, value: params[:email] %>
关于ruby-on-rails - URL 中的参数未传递给表单 - Rails 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24921170/