Ruby on rails:模型表单

时间:2017-10-26 02:57:47

标签: ruby-on-rails

我是铁杆的新手,不知道如何解决这个问题。我有名为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

1 个答案:

答案 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