Ruby on rails 如何在RubyonRails中从模型到控制器调用操作
我试图从post model调用“检查”操作Ruby on rails 如何在RubyonRails中从模型到控制器调用操作,ruby-on-rails,ruby-on-rails-4,ruby-on-rails-5,Ruby On Rails,Ruby On Rails 4,Ruby On Rails 5,我试图从post model调用“检查”操作 class Post < ApplicationRecord after_commit :testing def testing @id = "#{self.id}" puts @id checking # call action to controller end end 我正在尝试实现上述目标,但它没有被调用。您不应该从模型调用控制器操作。甚至控制器方法
class Post < ApplicationRecord
after_commit :testing
def testing
@id = "#{self.id}"
puts @id
checking # call action to controller
end
end
我正在尝试实现上述目标,但它没有被调用。您不应该从模型调用控制器操作。甚至控制器方法也不是这样调用的。如果您想触发一个操作,那么应该将其作为视图窗体或输入方法的目标来编写,或者作为通过另一个控制器方法本身的重定向来编写。如果您确实希望触发此操作(如果您希望在将记录保存到侦听器url后发送消息),我建议使用库(如
HTTP::Net
或gem-likeHTTParty
)触发对操作的调用,并使用其url或rails url\u助手。这也是不建议的,并且/或者不是rails中的操作方式。您可以通过实例化控制器来实现这一点
SomeController.new.some_action
但是,不建议使用,
,因为您的模型逻辑应该独立于控制器逻辑。你的模式应该遵循
一个类应该只有一个职责
您可能需要一些控制器和模型的通用逻辑或一些服务 正如所说:模型不应该知道控制器
SomeController.new.some_action
视乎原因,
检查
,从控制器
只需为当前Post
调用此方法即可控制器
中设置某些内容并在模型
中签入,则可以使用定义的方法def checking
puts "not Working"
end
def create
@post = current_user.posts.build(post_params)
if @post.save
checking
end
end
def checking
puts "Is is working"
end
def create
@post = current_user.posts.build(post_params)
@post.save
if @post.commmited?
checking
end
end
def checking
puts "Is is working"
end
如果这不是您想要的,因为您对提交回调特别感兴趣,您可以将代码更改为:
posts\u controller.rb
def checking
puts "not Working"
end
def create
@post = current_user.posts.build(post_params)
if @post.save
checking
end
end
def checking
puts "Is is working"
end
def create
@post = current_user.posts.build(post_params)
@post.save
if @post.commmited?
checking
end
end
def checking
puts "Is is working"
end
并为模型添加一些逻辑:
class Post < ApplicationRecord
attr_accessor :commit_performed
#unset the commit_performed attribute on first callbacks
before_destroy :unset_commit
before_validation :unset_commit
#set the commit_performed attribute after commit
after_commit :set_commit
def unset_commit
@commit_performed = false
end
def set_commit
@commit_performed = true
end
def commited?
@commit_performed
end
end
class Post
您应该从控制器调用模型函数,模型不应该知道控制器逻辑您这样做的原因是什么?更多地解释什么才是真正要做的,因为你似乎只是迷路了。模型不应该知道控制器的逻辑。也许你们可以重构并设置一些变量,从控制器到模型,就像本文描述的那个样,你们到底想要什么?你为什么要打电话给控制员?他的案子有很多工作要做。他不是真的需要一块宝石,他需要想想他到底想做什么。谢谢你们。这对我更有帮助。