簡體   English   中英

Rails模型調用Controller動作

[英]Rails Model to call Controller action

我需要從模型內部的方法調用控制器內部的動作。 這是我用其他語言做的很多事情(當使用MVC框架時),但是,我從未在ruby on rails上看到過這種情況。 該操作不會呈現任何內容,只是更新會話變量。

這通常不是你在MVC模式中通常會做的事情。 您的模型應該只包含業務邏輯(和數據訪問)。 你能提供一些關於你打算打電話的信息嗎?為什么? 通常當你試圖做這樣的事情時,這是一種氣味,某種東西不是它應該的地方。

這通常是我看到它的方式:

  • 模型 - 這些是具有業務邏輯方法的數據對象
  • 控制器 - 這些是您的應用程序采取的操作,他們控制模型並告訴他們該做什么,他們控制視圖告訴它發出什么
  • 查看 - 這是界面層,它可以是任何格式(html,js,xml)但它的邏輯很少

如果您嘗試從模型中調用控制器中的某些內容,則可能意味着模型中的控制邏輯過多。

或者,也許,你只有一個可以在任何地方使用的方法(它是一個幫助方法,它實際上與模型和控制器無關)。 在這種情況下,您應該將它放在/ lib目錄中的自己的模塊中。

編輯:是的,會話變量應該只能在Controller中觸摸/更新。 也許你的模型中有太多的控制類型邏輯? 如果它實際上是Controller的行動的一部分,也許重新考慮該邏輯與實際模型的關系有多緊密。

如果你想要調用控制器動作(或者cahange會話因為session被定義為@session變量並且它是私有的)你應該將控制器實例作為參數傳遞給模型的方法,所以如果你需要編輯session方法可能類似於

def change_session(controller)
  @ses = controller.send :session
  //some actions
end

在控制器中

def something
  s = Session.new
  s.change_session(self)
  ...
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM