我是铁杆的新手,不知道如何解决这个问题。我有名为User的标准模型,在User I中有10个不同的属性。 10个属性包括用户选择天气的属性,他是“a”型或“b”型。当用户点击注册时,我希望他们选择天气,他们输入“a”或输入“b”。如果它们是“a”类型,我希望它们被重定向以仅填写5个属性。如果它们是“b”类型,我希望它们填写其他4个属性。我的问题是如何在控制器中创建逻辑,以便在第一个初始问题之后将其重定向到正确的形式。
[被修改]
这是合乎逻辑的吗?
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(personality_selection)
if @user.save
redirect_to root_path
else
render :new
end
end
private
def personality_selection
params.require(:user).permit(:personality_a_or_b)
if params[:personality] == 'a'
redirect_to type_a_path
elsif params[:personality] == 'b'
redirect_to type_b_path
end
end
def type_a
params.require(:user).permit(:trait2, :trait3, :trait4 :trait5, :trait6)
end
def type_b
params.requrie(:user).permit(:trait7, :trait8, :trait9, :trait10)
end
end
答案 0 :(得分:0)
有一个初始表格,用户输入非个性信息,以及是否输入'a'或'b'。选择类型“a”或“b”应输入属性“personality_type”。
在保存时,控制器将重定向到一个新的个性特定表单,其中只包含与该个性相关的字段。
在保存下一个表单时,它将保存到Update控制器操作,只需更新个性字段。
<强> users_controller.rb 强>
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
if @user.personality_type == 'a'
redirect_to edit_personality_a_path(@user)
else
redirect_to edit_personality_b_path(@user)
end
else
render :new
end
end
def update
@user = User.find(params[:id]
@user.update(user_params)
redirect_to @user
end
def edit_personality_a
@user = User.find(params[:id])
end
def edit_personality_b
@user = User.find(params[:id])
end
private
def user_params
params.require(:user).permit(..params..)
end
end
<强> edit_personality_a.html.erb 强>
= form_for @user do |f|
.... put all the form fields that are specific 'a' personality.
<强> edit_personality_b.html.erb 强>
= form_for @user do |f|
.... put all the form fields that are specific 'b' personality.
<强>的routes.rb 强>
resources :users do
get 'edit-personality-a' => 'users#edit_personality_a', as: 'edit_personality_a'
get 'edit-personality-b' => 'users#edit_personality_b', as: 'edit_personality_b'
end