我的客户要求提供一个 url 来完成其应用程序中的工作流程:example.org/task/:token
. :token
该任务的唯一 ID在哪里。
在TaskController
inindex
操作:token
中用于查询任务对象,并根据任务的当前状态呈现视图:
def index
@task = Task.where(token: params[:token])
render @task.state.to_s
end
每个状态都有一个视图,呈现视图的逻辑在视图本身中(丑陋!!)。
我想重构它,以便使用任务状态来确定要呈现的控制器操作。我可以做到这一点render template: '#{state}/action'
。但这不会执行控制器动作逻辑。这意味着我仍然坚持视图中的控制器逻辑!
我发现这个解决方案有效,但它有点难看并且打破了一些“魔法”的轨道(必须显式渲染视图。)
我的问题是,有没有更好的方法在 Rails 中完成此任务,同时仍保持单个 url 而不会重定向到新的 url?