目前,我正在努力构建一个多步骤表单,其中每个步骤都创建一个模型实例。
在这种情况下,我有三个模型:
既然协会是这样的:
user有user_plan A connection属于user_plan game_dashboard属于connection
我想创建一个向导,允许current_user创建一个经过多步表单的game_dashboard,其中他还创建了连接和user_plan实例。
为此,我查看了Wicked,并开始从game_dashboard (这是最后一个)创建逻辑。当我不得不面对形式生成的时候,我觉得也许从底部开始并不是更好的解决方案。
所以我才来寻求帮助:
实现这个向导的更好方法是什么?从底部开始(game_dashboard)还是从顶部开始(use_plan)?
由于我目前没有向代码求助,所以我没有编写任何控制器或模型的逻辑,以防它对某人有帮助,我会把它放进去!
非常感谢
编辑
由于我需要一次只允许一个进程,但允许多个进程,为了避免params值,我决定创建一个名为“入职”的新模型,在那里处理步骤状态,每次检查步骤。
发布于 2022-11-28 01:38:50
最简单的方法是依赖Rails的标准MVC模式。
只需使用create和update控制器方法链接到下一个模型的表单(而不是show或index视图)
例如。
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
Con:
您的路线和链接帮助将是非常长和紧张的“底部”。例如。
game_dashboard_connection_user_plan_user_path(:user_id, :user_plan_id, :connection_id, :game_dashboard)
您只需手动将向导“步骤”链接到一起即可。
专业:
网址和帮手没那么疯狂。例如。
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.userCon:
(不是什么“骗局”,因为你可能最终还是会这么做的)
如果需要显示有关“父”记录的信息,则必须首先在控制器中执行模型查找:
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
endhttps://stackoverflow.com/questions/74594888
复制相似问题