如何动态更新其他页面'内容

时间:2014-05-31 21:10:12

标签: javascript ruby-on-rails

这里的编程新手。我正在使用Rails创建一个可以进行评论的网络应用程序,但是在确定从哪个特定部分开始的时候我会遇到一些麻烦。我很感激任何帮助:

让我们说在我的主页上我想要一个前10名的餐馆名单。在每个地方旁边都会有一个分数。如果您点击该餐厅的链接,它会将您带到该餐厅的详细页面,您可以在其中评估多种不同的品质。当用户评价该分数将更新的地方。如何根据用户对每个地方的评分,将该分数和排名反映在我的主页上?认为这可能必须使用一些Javascript(或者有没有办法在Rails中执行此操作?)。谢谢!

2 个答案:

答案 0 :(得分:0)

只有javascript是不够的。

当在用户的浏览器中加载网站时,数据库中的所有信息都会被加载一次,就像html文件一样。即使您使用ajax或简单的redirect_to:back方法更新餐馆对象,其他页面或其他浏览器也不会有任何更改。

要解决此问题,每当有人在您的应用中触发事件并在您的主页上接收此事件时,您就可以使用推送器之类的内容发送事件。如果您的应用程序的功能并不复杂,您可以在rails应用程序中使用自己的推送服务器,如faye。以下是有关使用它的railscast的参考:

http://railscasts.com/episodes/260-messaging-with-faye?view=similar

无论如何,每当我需要在我的应用中添加一些实时功能时,我更喜欢使用推送器。

http://pusher.com/tutorials

关于投票过程,这样做的好方法是:

"微/了activerecord-信誉系统"

如果您不想使用会更新您投票的餐厅页面内容的ajax,则可以使用vote在控制器中添加redirect_to :back方法。此说明会将您的应用重定向到新的网址,完成后,整个方法将重定向回更新的页面并更新投票状态。

def vote
  value = params[:type] == "up" ? 1 : -1
  @haiku = Haiku.find(params[:id])
  @haiku.add_or_update_evaluation(:votes, value, current_user)
  redirect_to :back, notice: "Thank you for voting!"
end

要在其他用户对餐馆投票时动态刷新主页,您应该创建一个rake任务,该任务将根据更新的数据库结构更新页面上的信息。

答案 1 :(得分:0)

您的问题的纯粹答案是您需要data persistence - 集中存储数据的地方&在用户的视图中呈现它。

有趣的是,为什么你应该在Ruby on Rails部分提出这个问题 - 这是完全这个框架的用途,如果你没有,我会质疑你的能力&# 39;不要考虑这个

-

<强>数据库

Rails使用中央数据库来存储您的数据。它使用MVC programming pattern使您能够在任何需要的地方访问该数据;允许您根据自己的要求进行操作:

enter image description here

如果不详细说明如何从头开始制作您的应用,我将为您提供您应该使用的基本原则:

#config/routes.rb
root "restaurants#index"
resources :restaurants

#app/controllers/restaurants_controller.rb
Class RestaurantsController < ApplicationController
   def index
       @restaurants = Restaurant.all
   end
end

#app/models/restaurant.rb
Class Restaurant < ActiveRecord::Base
    has_many :reviews
end

#app/models/review.rb
Class Review < ActiveRecord::Base
    belongs_to :restaurant
end

#app/views/restaurants/index.html.erb
<% for restaurant in @restaurants do %>
    <%= restaurant.reviews.count %>
<% end %>

-

推荐阅读

您最好阅读Rails beginner guide如何使其正常工作。它基本上是Rails的用途;)