the*_*ter 2 ruby-on-rails ruby-on-rails-4
我想实现以下逻辑:
我们通过普通视图与我们的数据库进行交互.通过视图,可以对数据库对象执行基本的CRUD操作.每当现在一个特定的布尔值(对于任何记录)设置为true时,我想将此记录传递给REST API控制器,然后构建一个要发送给已知客户端的http字符串.
在模型类中,我通过after_update
回调观察所需的值
private
def check_boolean
@listofusers ||= Array.new
if self.boolean_changed?
@listofusers.push(self)
end
#redirect_to send_updates_path
#redirect_to :controller =>'api/users',:action=>"send_updates"
end
Run Code Online (Sandbox Code Playgroud)
这是我包含在我的路线中routes.rb
以获取指定的助手
get 'send_updates', to: 'api/user#send_updates', as: :send_updates
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
NoMethodError (undefined method `redirect_to' for #<User:0x00000005abc778>):
Run Code Online (Sandbox Code Playgroud)
重定向到控制器操作的正确方法是什么?提前谢谢了.
为了保持模型和数据库中的数据完整性,Rails在您model
和controller
代码之间保持着很大的差距:
这就是一些看似简单的交叉的分歧,例如Devise
current_user
实际上防止了这种方法的发生.
因此,您必须重新思考您的结构是如何工作的.
-
简而言之,您应该将逻辑保留在控制器中:
#app/controllers/your_controller.rb
class YourController < ApplicationController
def update
@model = Model.find params[:id]
@model = Model.update model_params
if @model.boolean_changed?
## do something here
else
redirect_to ...
end
end
end
Run Code Online (Sandbox Code Playgroud)
任何数据操作都可以保存在模型中; 您的控制器是您的所有业务逻辑应驻留的位置.
要添加到此,您必须记住,根据上图,Rails不会直接向您的模型发送数据.它首先通过控制器,因此是保持逻辑的正确位置.
你正在做的就像试图用发动机驾驶汽车.
归档时间: |
|
查看次数: |
2949 次 |
最近记录: |