Rails - 从js.erb文件更改数据库中的布尔值

时间:2015-12-17 10:04:31

标签: javascript ruby-on-rails database facebook boolean

在我分享内容到facebook后的rails应用程序的场景中,我将获得一个帖子ID为

的响应对象
post_id: "mypostidhere"

如果不成功,我将收到带有错误消息的响应对象。

因此,根据响应,我想更改数据库表中当前用户的最后一行的布尔列。为此,在我的 .js.erb 文件中,我尝试访问 current_user.model.last ,但它会引发以下错误。

undefined local variable or method `current_user' for 

那么如何根据响应更改数据库中的布尔列?

已更新

Ajax代码

 $.ajax({
        type: "POST",
        url: "/action"
    });

控制器代码

def action
  current_user.modal.last.toggle!(:boolean-column-name)
end

它成功更改了表列。但之后我在浏览器CONSOLE中收到错误,如下所示

POST http://URL/action
500 (Internal Server Error)

我是AJAX的新手。我在ajax请求中做错了什么?提前谢谢。

2 个答案:

答案 0 :(得分:0)

current_user不是JS函数/文件的局部变量,它是rails应用程序中提供并可用的帮助程序。

所以,我想问的是:

  

您如何在JS文件中使用current_user

您可以做的是对控制器方法进行ajax调用,然后直接从控制器访问current_user

答案 1 :(得分:0)

如果您想更改数据库,您将需要与您的Rails应用程序进行通信,这是通过ajax完成的:

#app/assets/javascripts/application.js
... // your events will fire
$.ajax({
   url: "/users/update",
   method: "PUT",
   data: { param: "value" }
   success: function(data) {
      // do something here
   };
});

这将允许您执行以下操作:

#config/routes.rb
resources :users do
   put :update, on: :collection
end

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def update
      current_user.update(update_params)
   end

   private

   def update_params
       params.permit(:param)
   end
end