【问题标题】:Accessing ruby controller from another controller从另一个控制器访问 ruby​​ 控制器
【发布时间】:2016-05-30 21:23:05
【问题描述】:

我正在使用 RoR 制作仪表板,仪表板将向登录用户显示项目列表。

仪表板将位于单个页面上下文中。仪表板本身有一个控制器,项目有一个单独的控制器。

当我向仪表板发出请求时,仪表板控制器的索引操作会对其进行处理。我希望能够打印出项目列表。这些项目从项目控制器上的getAll 方法返回。

项目控制器需要用户的上下文,以便它可以正确地将用户与其项目匹配。我已经尝试将项目导出为getAll 项目方法中的一个
@projects 实例变量,但是由于仪表板控制器是被调用的而不是项目控制器,因此该变量不在范围内或已初始化。

我计划通过使用 @projects 集合的部分来在视图中显示项目。看来我也不能通过 AJAX 调用它,因为它需要用户的会话。

实现这一点的最佳方式是什么?

【问题讨论】:

    标签: jquery ruby-on-rails ruby ajax model-view-controller


    【解决方案1】:

    在仪表板控制器中使用这样的方法

    def getprojects
    @projects=Project.all
    end
    

    如果你想要特定用户的项目,那么

       def getprojects
       @projects=Project.where(:user_id=>params[:user_id])
       end
    

    更新 1

    如果你不想重复这个逻辑,那就改变路由,让它直接访问项目控制器

    【讨论】:

    • 假设您所指的项目类是模型,这是否会导致在仪表板控制器和项目控制器中选择项目的逻辑重复?
    • 如果你不想重复这个逻辑,那就改变路由直接访问项目控制器
    【解决方案2】:

    我已通过声明getAll 方法的静态版本来解决此问题,该方法又调用非静态版本。静态版本将用户会话作为参数,然后可以在非静态方法中使用。

    该方法的静态版本可从传入用户会话的仪表板控制器获得。

    【讨论】:

      猜你喜欢
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多