如何redirect_to自定义html文件

时间:2011-11-23 15:41:01

标签: ruby-on-rails http-redirect

我有一个链接,我希望用户按,它将转到缺省对象内的自定义视图(new.worker.html.erb)我该怎么做?

我目前在我的控制器中有一个名为render的link_to方法,用于检查用户会话的staff_type以决定用户应该重定向到哪里

编辑:正如评论者所指出的,答案是在link_to中调用相关控制器到你的视图,然后在控制器内执行正确渲染的检查,如下所示:

   if session[:user].staff_type == 3
        render "new_worker"

指向相关视图中的new_worker视图

2 个答案:

答案 0 :(得分:0)

根本不清楚,给我们更多信息什么是缺席,staff_type,worker?你有所有这些东西的路线,资源和控制器吗?它们是通过关系联系起来的吗?

基本答案是:使用rails,为了渲染模板,您需要一个控制器和一个访问控制器的路径。然后快速redirect_to new_worker_path应该工作

编辑: 路由指向动作,这些动作呈现视图(或其他http响应,例如redirect_to)。

Rails(我猜你的是2.3.11),是一个REST,面向资源的框架。恕我直言,你应该保留这个,并重定向到new_absence_path,如果你想为staff_type设置一个不同的模板,你可以在链接:type=>'worker'中添加一个参数,并在你的控制器中使用它来呈现一个特定的模板。 p>

最佳实践方式是创建路线和动作。 for rails 2.3.11

map.resources :staff, :member => {:new_worker => :get}

然后在你的员工控制器中定义:

def new_worker
  ...
  render 'new.worker'
end

答案 1 :(得分:0)

好的,不同的员工是不同的员工类型,对吧?工人就是其中之一?

我可能会做的是在你的员工控制器中,在show中 - 这是我假设你想要渲染一个不同的模板,当你在看一个特定的staff_type的特定人时 - 是找到工作人员,然后查看他们的:staff_type属性,并做一个if或者一个案例来渲染相应的部分。

def show
  @staff = Staff.find(params[:id])

  case @staff.staff_type
  when "worker"
    render :action => "show", :layout => "worker" 
  else
     #other options
  end
end

上面为show动作呈现(传递这些变量),但使用名为worker的自定义布局。

或者,我建议使用相同的骨架,然后使用此渲染为每个不同的人员类型渲染不同的部分,而不是上面的渲染:

render :partial => "worker", :object => @staff

在这种情况下,视图可能会被调用_worker.rhtml

请参阅此处的信息:http://rails.rubyonrails.org/classes/ActionController/Base.html#M000464

您可以在任何控制器操作中使用上述内容。但是您需要在控制器中执行此操作,或者重新组织您的资源。