我有一个Rails应用程序,我试图使用一个在文本字段中找到@ mentions
的模型文件,然后希望它使用@mentioned
回调通知after_create
一方
class Post < ApplicationRecord
after_create :notifiy_users
def notifiy_users
mentioned_users.each do |user|
Notification.create!(recipient: user,
actor: self.user,
action: 'mentioned',
notifiable: self)
end
end
def mentions
@mentions ||= begin
regex = /@([\w]+)/
matches = body.scan(regex).flatten
end
end
def mentioned_users
@mentioned_users ||= User.where(username: mentions)
end
end
在local_env
上有效,并且创建并保存了通知,但是当我进行生产时,就好像从未调用after_create
一样,并且notify_users方法也没有任何回报。
对于更好地解决此问题的任何帮助或建议,将不胜感激。
答案 0 :(得分:1)
从模型内部调用控制器动作违反了MVC。模型动作应仅处理与数据相关的逻辑,所有动作应留在控制器内。
相反,您应该从控制器内部调用回调:
If a string of length zero is returned, the channel stream has closed.
您的模型将如下所示:
def writeall(sock):
while True:
data = sock.recv(256)
if not data:
sys.stdout.write("\r\n*** EOF ***\r\n\r\n")
sys.stdout.flush()
break
sys.stdout.write(data)
sys.stdout.flush()
writer = threading.Thread(target=writeall, args=(chan,))
writer.start()