这似乎是一个初学者的问题,但它让我感到难过。我有一个用户模型和一个位置模型。位置属于用户,用户具有许多位置。我将位置存储为路由文件中的嵌套资源。
这是我的LocationsController文件中的create函数:
def create
@user = User.find(params[:user_id])
@location = @user.locations.build(params[:location])
respond_to do |format|
if @location.save
format.html { redirect_to @user }
format.js {
@locations = @user.locations
render 'create'
}
else
format.html { render @user }
format.js
end
end
end
create.js.erb:
$('table#locations').html("<%= escape_javascript(render(@locations)) %>");
_location.html.erb:
<tr>
<td><%= location.user.name %></td>
<td><%= location.created_at %></td>
<td><%= location.longitude %></td>
<td><%= location.latitude %></td>
</tr>
使用AJAX保存到数据库没有问题。但是,在检索记录时,返回表的最后一行仅包含用户名。不显示created_at,经度和纬度。如果我刷新页面然后显示它们。有没有人知道为什么会发生这种情况?
感谢。
更新
我颠倒了模型的顺序,它仍然是不打印的底部条目。我的猜测是它与视图而不是模型有关。
答案 0 :(得分:1)
我认为在控制器中为AJAX响应初始化@locations变量时可能会出现问题。您保存新位置,但@user对象可能没有注意到。而不是
@locations = @user.locations
试
@locations = Location.where(:user_id => @user)
或类似的东西,这将保证您从数据库中提取位置。
这是一个猜测!
答案 1 :(得分:1)
由于您在保存新位置之前从数据库获取了用户记录,因此可能无法检索新位置。也许在渲染视图之前调用user.reload
。或等到您保存位置之后再等User.find
。