标签: ruby

从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万
查看次数

Rails:更新模型属性而不调用回调

我有一个具有:credits属性的User模型.我想要一个简单的按钮,通过一个名为"add"的路由将5添加到用户的信用点,这样/ users/3/add会将5添加到用户id = 3的信用点.

def add
    @user = User.find(params[:id])
    @user.credits += 5
    redirect_to root_path
end
Run Code Online (Sandbox Code Playgroud)

这是我的控制器的相关部分.问题是,我不想调用@ user.save,因为我有一个before_save回调,它根据当前的UTC时间重新加密用户的密码.我只想简单地为属性添加5并避免回调,我从未想过这么简单的事情会如此困难.

编辑:

我将回调更改为:before_create,这是我的新控制器代码(相关部分):

  def add
    @user = User.find(params[:id])
    @user.add_credits(5)
    @user.save
    flash[:success] = "Credits added!"
    redirect_to root_path
  end
Run Code Online (Sandbox Code Playgroud)

这是我在模型中的代码:

 def add_credits(num)
    self.credits = num
 end
Run Code Online (Sandbox Code Playgroud)

编辑2:

好吧,这是一个验证问题,使"编辑"中的更改无法正常工作,但我仍然喜欢在没有回调的情况下更新原始问题的答案!

ruby attributes model ruby-on-rails callback

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

将图像添加到轨道上的ruby布局中

我想在我的模板中为我的ruby on rails项目添加一个图像,其中我当前<img src="../../../public/images/rss.jpg" alt="rss feed" />在布局stores.html.erb文件中有代码但是这似乎没有加载,因为它看起来像它缺少一条我不知道是什么的路线它应该是.

有什么想法吗?

ruby layout ruby-on-rails image

68
推荐指数
3
解决办法
15万
查看次数

obj.nil?与obj == nil

是否更好使用obj.nil?obj == nil两者的好处是什么?

ruby comparison null

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

rails - 查找多个数组之间的交叉点

我试图找到多个数组之间的交集值.

例如

code1 = [1,2,3]
code2 = [2,3,4]
code3 = [0,2,6]
Run Code Online (Sandbox Code Playgroud)

结果将是2

我知道在PHP中你可以用array_intersect做到这一点

我希望能够轻松添加额外的数组,所以我真的不想使用多个循环

有任何想法吗 ?

谢谢,亚历克斯

ruby arrays ruby-on-rails array-intersect

68
推荐指数
2
解决办法
3万
查看次数

在Ruby中=== vs. ==

在Ruby中,==和===之间有什么区别?该RDoc的

Case Equality - 对于Object类,实际上与调用#==相同,但通常由后代重写以在case语句中提供有意义的语义.

#==一样的==吗?你能举例说明在case语句中何时/如何使用它?

ruby

68
推荐指数
3
解决办法
2万
查看次数

Ruby String to Date Conversion

我在Ruby on Rails中遇到了一个问题.我希望将一串格式Tue, 10 Aug 2010 01:20:19 -0400 (EDT)转换为日期对象.

无论如何我能做到这一点.

这是我在下面看到并尝试过的,没有运气:

  1. Date.strptime(updated,"%a, %d %m %Y %H:%M:%S %Z")
  2. 慢性解析器
  3. Ruby:将字符串转换为日期
  4. 使用Ruby从文本解析日期

这个你能帮我吗.

ruby datetime ruby-on-rails date

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

如何检查数组是否有重复项?

我有一个数组A.我想检查它是否包含重复值.我该怎么办?

ruby arrays

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

Ruby对象和JSON序列化(没有Rails)

我试图理解Ruby中的JSON序列化格局.我是Ruby的新手.

如果您不使用Rails,是否有任何好的JSON序列化选项?

这似乎就是这个答案所针对的(对于Rails) 如何将Ruby对象转换为JSON

json gem看起来好像你必须编写自己的to_json方法.我无法让to_json处理数组和散列(文档说它适用于这些)是否有一个原因json gem不只是反映对象并使用默认的序列化策略?这不是如何to_yaml工作(猜测在这里)

ruby serialization json jsonserializer

68
推荐指数
6
解决办法
9万
查看次数

mysql和mysql2 gem有什么区别

我曾经使用mysql宝石,但现在我经常听说mysql2宝石.此外,它默认包含在GemfileRails 3.0.x.

使用mysql2宝石有什么区别和优点?

ruby mysql rubygems ruby-on-rails

68
推荐指数
2
解决办法
3万
查看次数