使用ajax增加整数模型变量

时间:2014-01-12 22:06:20

标签: javascript jquery ruby-on-rails ajax

刚刚开始使用rails,我遇到了一个障碍,我似乎找不到针对我的具体情况的准确答案。

我希望通过ajax在我的'Font'模型中增加变量'votes'。我目前有Javascript通过div上的点击操作触发此操作

我发现问题的最近的例子是收藏夹按钮,即推特。但是,大多数“收藏夹”功能使用单独的收藏夹数据模型;我只希望增加变量,因此我认为为此设计一个全新的数据模型没什么意义。

index.html.erb上的Javascript

$("#heading_vote").click(function(){
  var fontid='<%= h @font_1.id %>'
  $(".text").html(fontid);
  $.ajax({type: "GET", url: 'fonts/'+fontid+'/vote', success: function(){
      $(".text").html('voted');
    }
  });
});

rake routes

 Prefix Verb   URI Pattern               Controller#Action
     root GET  /                         home#index
    fonts GET  /fonts(.:format)          fonts#index
         POST  /fonts(.:format)          fonts#create
 new_font GET  /fonts/new(.:format)      fonts#new
edit_font GET  /fonts/:id/edit(.:format) fonts#edit
     font GET  /fonts/:id(.:format)      fonts#show
        PATCH  /fonts/:id(.:format)      fonts#update
          PUT  /fonts/:id(.:format)      fonts#update
       DELETE  /fonts/:id(.:format)      fonts#destroy
         POST  /fonts/:id/vote(.:format) fonts#vote

font.rb model(初始化时将'votes'变量设置为0)

class Font < ActiveRecord::Base  
  validates :title, presence: true, length: { minimum: 5 }
  validates :linktitle, presence: true, length: { minimum: 5 }
  validates :link, presence: true, length: { minimum: 5 }

  #set defauls value for votes variable
  before_save :default_values
  def default_values
    self.votes ||= '0'
  end
end

font_controller.rb中的操作,它将'votes'变量递增1:

def vote
  @font = Font.find(params[:id])

  @font.update_attribute("votes",votes+1)    

  respond_to do |format|
    format.html
    format.js
  end
end

我的routes.rb文件(我认为这就是问题所在 - 我是否正确连接到Font控制器中的投票操作?):

app::Application.routes.draw do

  root to: "home#index" 

  resources :fonts

  post '/fonts/:id/vote' => 'fonts#vote'

任何帮助或调试建议都将不胜感激。感谢

1 个答案:

答案 0 :(得分:1)

我会这样做:

然后删除js代码:

路径文件中的

post '/fonts/:id/vote' => 'fonts#vote', as: :vote
视图模板中的

<%= link_to 'Vote', vote_path(@font), remote: true %>

app / views / fonts / vote.js.erb

alert('Vote saved!');

您可能希望在js.erb文件中写入更多js内容,使其看起来更加用户友好,但作为演示,警报会没问题。