Ruby on Rails 7具有多个模型逻辑的多步表单

o7jaxewo  于 2022-11-29  发布在  Ruby
关注(0)|答案(1)|浏览(160)

我目前正在努力建立一个多步骤的形式,其中每一步创建一个模型示例。
在本例中,我有3个模型:
1.用户计划
1.连接方式
1.游戏控制面板
自联想是这样的:
一个user有一个user_plan一个connection属于一个user_plan一个game_dashboard属于一个connection
我想创建一个向导,允许current_user创建一个game_dashboard,并通过一个多步骤表单创建连接和user_plan示例。
为此,我看了Wicked gem,并从game_dashboard开始创建逻辑(这是最后一个)。当我不得不面对表单生成时,我觉得也许从底部开始并不是更好的解决方案。
这就是我来这里寻求帮助的原因:
执行此精灵的最佳方式是什么?从底部开始(game_dashboard)还是从顶部开始(use_plan)?
由于我没有要求代码的帮助,目前我没有写任何控制器或模型的逻辑,如果它会对别人有帮助,我会把它!
多谢了

vmjh9lq9

vmjh9lq91#

最简单的方法是依赖Rails的标准MVC模式。
只需使用createupdate控制器方法链接到下一个模型的表单(而不是showindex视图)
例如:

class UserPlansController < ApplicationController
  ...

  def create
    if @user_plan = UserPlan.create(user_plan_params)
      # the next step in the form wizard process:
      redirect_to new_connection_path(user_id: current_user, user_plan_id: @user_plan.reload.id)
    else
      @user_plan = UserPlan.new(user: current_user)
      render :new
    end    
  end

  ...

  # something similar for #update action
end

对于布线,您有两个选项:

您可以嵌套所有内容:

# routes.rb

resources :user do
  resources :user_plan do
    resources :connection do
      resources : game_dashboard
    end
  end
end

专业:

这将使您更容易在控制器中设置关联,因为您的所有路线都有您需要的内容。例如:
/users/:user_id/user_plans/:user_plan_id/connections/:connection_id/game_dashboards/:game_dashboard_id

条件:

你的路线和链接助手将是非常长和激烈的“底部”。
game_dashboard_connection_user_plan_user_path(:user_id, :user_plan_id, :connection_id, :game_dashboard)

您可以手动将向导“步骤”链接在一起

专业:

URL和助手并没有那么疯狂。
new_connection_path(user_plan_id: @user_plan.id)
使用一个有意义的URL变量:user_plan_id=1,则可以查找上游的所有内容。例如:

@user_plan = UserPlan.find(params['user_plan_id'])
@user = @user_plan.user

条件:

(not很大程度上是一个“骗局”,因为无论如何你可能最终都会这样做)
如果需要显示有关“父”记录的信息,则必须首先在控制器中执行模型查找:

class GameDashboardController < ApplicationController
  # e.g. URL: /game_dashboards/new?connection_id=1
  def new
    @connection = Connection.find(params['connection_id'])
    @user_plan = @connection.user_plan
    @user = @user_plan.user
    @game_dashboard = GameDashboard.new(connection: @connection)
  end
end

相关问题