【问题标题】:Is an expression interpreted differently in irb and rails?irb 和 rails 中的表达式解释不同吗?
【发布时间】:2016-05-23 01:09:15
【问题描述】:

我刚刚注意到

User.where("id = '309'")

在 IRB 控制台中工作。但是它在我的控制器中不起作用。我想知道为什么?

相比之下,User.find(309) 可以在 irb 控制台和我的控制器中使用。

在我的控制器中,

before_action :correct_user,   only: [:edit, :update], 

private  
  def correct_user  
      @user = User.where("id = '309'")  
      redirect_to(root_url) unless current_user?(@user)  
 end  
end  

这不起作用。视图网页无法打开且没有错误消息。

如果 User.find(309) 代替。它可以通过正确查看网页来工作。

【问题讨论】:

  • Ruby2.1.5,rails 4.2.0
  • 找不到记录就不行了?还是因为它产生了错误?
  • 相比之下,User.find(309) 在 irb 控制台和我的控制器中都有效。
  • 向我们展示在控制器中运行的代码。您确定控制台和 Web 应用正在与同一个数据库通信吗?
  • 请不要在 cmets 中发布代码。使用您要显示的代码更新您的问题。

标签: ruby ruby-on-rails-4 activerecord irb


【解决方案1】:

您似乎希望User.findUser.where 会出现相同的行为。 User.find 将自动抓取一个实际的用户,而User.where 将抓取一个搜索查询,该查询类似于数组。尝试在 where 后面加上 .last。像这样:

@user = User.where("id = '309'").last

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 1970-01-01
  • 2018-09-11
  • 1970-01-01
  • 2018-04-18
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多