Rails从CoreController嵌套。路由麻烦

时间:2014-03-07 10:37:52

标签: ruby-on-rails ruby ruby-on-rails-4 routing

我有一些用户类型,例如学生,教师,管理员。对于每个用户类型,我有一个控制器。例如,学生控制器放在app/controllers/students目录中。但大多数控制器是相同的。因此,我在app/controllers/core中创建了核心控制器

应用/控制器/核心/ settings_controller.rb

class Core::SettingsController < ApplicationController

  def show
    # instance variables, redirections etc. placed here...
    #
  end

  # other actions...
  #
end

应用/控制器/学生/ settings_controller.rb

class Student::SettingsController < Core::SettingsController

end

的routes.rb

namespace :student do
  # ...
  resource :schedule, :only => [:show]
  resource :settings, :only => [:show, :update]
end

namespace :admin do
  # ...
  resource :settings, :only => [:show, :update]
end

我将<%= link_to "<", schedule_path(:date => @date.prev_month)" %>添加到views/core/settings/_month_nav.html.erb文件时启动了问题。

除了写下丑陋的代码之外,还有其他解决办法吗?

<% if admin? %>
  <%= link_to "<", admin_schedule_path ... %>
<% elsif student? %> 
  <%= link_to "<", student_schedule_path ... %>
...

1 个答案:

答案 0 :(得分:2)

您可以执行类似

的操作
<%= link_to "<", self.send("#{current_user.class.to_s.downcase}_schedule_path",:date => @date.prev_month) %>

我使用current_user因为我不确定你是如何设置它的,因为你的视图代码不是很清楚。