【问题标题】:Rails - How to call a controller method from a different model?Rails - 如何从不同的模型调用控制器方法?
【发布时间】:2017-11-10 22:29:03
【问题描述】:

我有一个 PagesController 来处理我的应用程序的所有静态页面。它有一个名为join_session 的方法,用于渲染视图pages/page_a.html.erb。这行得通。

我的问题:我正在编写一个在用户重新登录时呈现最后查看的页面的方法(使用User 模型中的Devise hook after_database_authentication)。

我可以从User 模型中调用PagesController join_session 方法吗?


[我不知道怎么做,所以我尝试了一个 hacky 解决方法:在 PagesController 中编写和调用一个类方法,并在那里渲染视图,但是由于新方法的名称与名称不匹配路由中的控制器方法,无法解析视图中的变量。]​​

我的路线:

get 'pages/page_a', to: 'pages#join_session'

我们将不胜感激! :)

【问题讨论】:

  • 请问您为什么要从模型中调用控制器方法?在绝大多数情况下,您会在控制器中调用模型方法,而不是反过来。
  • @Jason :我正在使用 Devise 钩子 after_database_authentication 在用户成功登录后执行代码,这将确定最后向他们显示哪个静态页面,然后尝试呈现它。据我从上面链接的线程中收集到的,我需要在User 模型中覆盖此方法(我尝试将它放在控制器中 - 它不起作用)。

标签: ruby-on-rails model-view-controller devise ruby-on-rails-5


【解决方案1】:

我认为在您的 ApplicationController 中有一个非常标准的方法来执行此操作,您应该查看 Devise 的本指南。

https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

我希望这会有所帮助。如果您有任何问题,请告诉我。

【讨论】:

  • 好的,谢谢!不幸的是,有一个问题:对于我的应用程序,在某些情况下,用户登录并且不应该被重定向到任何地方(相反,我使用 ActionCable 向他们发送一些内容并更新 DOM 以显示它)。在我不想重定向的所有情况下使用after_sign_in_path_forI got an error。所以最后我转而使用after_database_authentication,现在我无法让重定向的情况下工作 D:厄运循环......
  • 它一直在发生,很高兴你探索了一些东西。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-18
  • 2023-03-14
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多