刚刚开始使用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'
任何帮助或调试建议都将不胜感激。感谢
答案 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内容,使其看起来更加用户友好,但作为演示,警报会没问题。