在 Javascript 中使用 Rails 关联
Posted
技术标签:
【中文标题】在 Javascript 中使用 Rails 关联【英文标题】:Using Rails Associations in Javascript 【发布时间】:2015-05-13 21:40:28 【问题描述】:我正在尝试使用 ajax 和 rails 创建一个提要,以获取管理员和警报的活动。当我第一次创建视图时,我只使用了 rails,但我决定希望每次使用 ajax 在数据库中有新活动时更新一个提要。我的 ajax 函数可以正常工作,但我意识到我有很多无法调用的关联,因为它是 javascript 而不是 rails。我想知道如何使用联接将查询的 id 替换为创建警报的人的用户名,例如 activity.alert.username
action: "已创建警报" admin_id:空 alert_id: 17 类别:“警报” created_at:“2015-05-13T04:12:47.862Z” 编号:6 school_id: 1 更新时间:“2015-05-13T04:12:47.862Z”
class ActivitiesController < ApplicationController
before_filter :authenticate_admin!
def index
@activities = Activity.where(:school_id => current_admin.school.id).order("created_at DESC").limit(20)
respond_to do |format|
format.json render json: @activities
format.html
end
end
end
旧视图
- @activities.each do |activity|
%div.panel.panel-default
%div.panel-body
- if activity.admin_id != nil
%span.action
= activity.admin.email
= activity.action
- else
%span.action
= activity.alert.user.username
= activity.action
%span.timestamp
#activity.created_at.strftime("%b %d %Y %l:%M %p")
%span.category
#activity.category
新视图
%div#activity-feed
:javascript
getActivity();
function getActivity()
$.getJSON("activity", function(data)
for(var i = 0; i < data.length; i++)
var feed = "<div class='panel panel-default'> <div class='panel-body'>" + "<span>" + data[i].action + "</span>" + "</div> </div>";
$("#activity-feed").html(feed);
console.log(data);
);
setInterval(function()
getActivity();
, 5000);
【问题讨论】:
【参考方案1】:您需要在控制器(即 Rails)中处理数据关联,因为 Rails 是可以直接访问数据库的层。基本上,您要做的是从控制器中的数据库中加载所有必要的数据,然后将其发送回客户端(Javascript)以供其使用。
您可以使用“包含”来包含关联的对象。
@activities = Activity.include(:alert).where...
【讨论】:
是的,这就是我想知道如何实现加入来做到这一点 我刚刚更新了答案。您可以使用包含。我希望这会有所帮助。 它仍然给我 id 而不是用户名以上是关于在 Javascript 中使用 Rails 关联的主要内容,如果未能解决你的问题,请参考以下文章