相关疑难解决方法(0)

从Ruby on Rails中的模型中访问current_user

我需要在Ruby on Rails应用程序中实现细粒度的访问控制.单个用户的权限保存在数据库表中,我认为最好让相应的资源(即模型的实例)决定是否允许某个用户从中读取或写入.每次在控制器中做出这个决定肯定不会很干.
问题是,为了做到这一点,模型需要访问当前用户,调用类似的东西.但是,模型通常无法访问会话数据. may_read?(current_user, attribute_name)

有一些建议可以在当前线程中保存对当前用户的引用,例如在 此博客文章中.这肯定会解决问题.

相邻的Google搜索结果建议我在User类中保存对当前用户的引用,我想这应该是那些应用程序不必同时容纳很多用户的人.;)

长话短说,我觉得我希望从模型中访问当前用户(即会话数据)来自我做错了.

你能告诉我我错了吗?

ruby session ruby-on-rails rails-activerecord

69
推荐指数
10
解决办法
6万
查看次数

如何在模型轨道中访问辅助"current_user"?

我需要在我的User模型中调用current_user(在ApplicationControler中定义,就像帮助器一样).

我测试ApplicationController.helpers.curret_user但不起作用:

irb(main):217:0> ApplicationController.helpers.current_user
NoMethodError: undefined method `current_user' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)

但这种方法在控制器和视图中工作正常......

那么如何让我当前的用户进入模型?

controller model helper ruby-on-rails-4

9
推荐指数
3
解决办法
1万
查看次数

Rails 5 服务器在一次收到多个请求时挂起

当一次从我的单独前端应用程序向 Rails API 发送多个请求时,我使用 Puma 开发的 Rails 5 服务器一直冻结并挂起。没有错误,它只是挂在 POST 请求上。当我尝试使用 CTRL + C 终止服务器时,没有任何反应。我必须手动终止该端口。

我尝试在development.rb中设置config.eager_load=true。我尝试在 application.rb 中添加 config.allow_concurrency 。我不停地用谷歌搜索毫无结果。我从前端同时发送大约 5 个请求,所以我相信是这么多请求造成的,但我不确定。

有其他人经历过这种情况或者知道这里需要做什么吗?我通常可以让所有请求成功返回前端大约 3-4 次,然后服务器就会冻结。

尤其是在服务器运行时更​​改项目中任何文件中的任何一行代码后,尤其会发生这种情况。

ruby-on-rails freeze puma server ruby-on-rails-5

6
推荐指数
1
解决办法
1362
查看次数

在Ruby on Rails中引用当前用户

所以我在http://railscasts.com/episodes/250-authentication-from-scratch上使用了"从头开始验证"railscast中的逻辑,它似乎工作,我可以坚持"你登录为. .."页面顶部的消息.

但是,如果我想做一些像提交帖子的日志这样的事情,我会碰到一点墙.

我不想通过新帖子中的隐藏字段提交它,因为我猜这有安全问题.

我不想在http://ruby.railstutorial.org/ruby-on-rails-tutorial-book的rails教程中使用"属于"逻辑,因为虽然它在技术上可以在这里工作,但我可能在将来需要记录谁创建了一个"属于"关系不存在的条目.

我试图做的是在我的post模型中创建一个"before save"函数调用,它指定一个"created_by"值,但我猜模型不能访问根据认证railscast创建的current_user.

所以现在我不知道怎么做这样的事情.

编辑:Ruby的新手,ERD的新手,所有这一切,但我所说的属于关系不存在的是,如果有一个评级系统的帖子,每个评级都属于一个帖子.但我也想记录提交每个评级的人.

ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
1万
查看次数

活动记录:急切加载与参数的关联

我有以下型号:

class Rating < ActiveRecord::Base
  belongs_to :item
  belongs_to :user
end

class Item < ActiveRecord::Base
  has_many :ratings
end
Run Code Online (Sandbox Code Playgroud)

我想获取所有项目,以及特定用户的评级,以显示每个项目旁边的当前用户评级(如果存在!).

我试过了...

Item.includes(:ratings).where('ratings.user_id = ?', user_id)
Run Code Online (Sandbox Code Playgroud)

...但是没有给我没有评级的项目.

我的第一个想法是与参数的has_many关联,然后使用includes方法传递该参数.但这似乎并不存在.

如何在不执行N + 1查询或将所有实体加载到内存中的情况下,在参数上过滤所有帖子和预先加载的关联?

activerecord ruby-on-rails ruby-on-rails-3

5
推荐指数
1
解决办法
3516
查看次数

获取current_user的总和,可通过js.erb partial访问

我有一个模型Expense.rb,用户有很多.可以通过ajax表单添加新费用,因此我有适当的文件设置(create.js.erb,destroy.js.erb ..等)

目前,当通过远程表单提交新费用时,还会在create.js.erb中更新金额总和,这在我的Expense模型中如下所示:

def total_value
    Expense.sum(:amount)
end
Run Code Online (Sandbox Code Playgroud)

create.js.erb:

$('#total').html('$<%= number_with_delimiter(@expense.total_value) %>');

问题是这总结了数据库的所有费用,而我只需找到current_user(我知道无法从模型访问).

在我的控制器内部,在索引操作上,我这样做:

@expenses = current_user.expenses
    @total_value = @expenses.sum(:amount)
Run Code Online (Sandbox Code Playgroud)

这意味着我只需执行以下操作即可在索引视图中为current_user获取它: <%= number_with_delimiter(@total_value) %>

但至于创造行动:

def create
    @expense = Expense.new(secure_params)
    @expense.user = User.find(current_user.id)
    @expense.save
    respond_to do |format|
      format.html { redirect_to index_expense_path }
      format.js
    end
  end
Run Code Online (Sandbox Code Playgroud)

我不确定如何将current_user传递给模型中的total_value,以便只计算create js.erb中使用的total_value中的current_user id.

javascript ruby ruby-on-rails

1
推荐指数
1
解决办法
174
查看次数