所以我试图在这里创建一个聊天系统。
我创建了一个从ApplicationRecord
扩展过来的MessageThread类。
我想获取链接到特定电子邮件的所有线程,并以json格式返回它们,这就是我的方法:
def show
threads = MessageThread.where(thread_owner: params[:id])
render json: {
status: 'SUCCESS',
message: 'Thread list fetched',
data: threads,
}, status: :ok
end
我记录了params[:id]
,它与我在React前端中发送的内容相对应。
这里的问题是threads
返回一个空数组(我可以将其转换为与该电子邮件没有关联的线程)。
现在最棘手的部分是,如果我在Rails控制台中执行此操作:
threads = MessageThread.where(thread_owner: "testmail@ki.com")
它将返回一个包含3个线程的数组(所有都链接到该邮件)。
那么为什么这在Rails控制台中起作用而在我的Rails控制器中不起作用?
编辑: 这是我处理请求的前端:
async requestThread(data) {
await fetch(`http://localhost:3000//message_threads/${data}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
})
.then(response => response.json())
.then(data => {
console.log(data)
})
.catch(e => {
console.log(e)
})
}
generateJsonData = () => {
this.requestThread(localStorage.getItem('email'))
}
编辑2:
我刚发现我的邮件扩展名在进入rails时就消失了。
它像mail@gmail
而不是mail@gmail.com
答案 0 :(得分:1)
我在这里找到了解决方法:Rails — Params with "dot" (e.g. /google.com)
发生的事情是,rails无法获得我电子邮件的.com扩展名,从而导致数组为空。
这是我上MessageThread
类的路线:
resources :message_threads, constraints: { id: /[0-z\.]+/ }