ROR Activerecord在哪里检查

时间:2014-09-15 07:28:54

标签: ruby-on-rails ruby activerecord

我正在使用ruby on rails并尝试检查数据库中的SIGNIN

这是我的代码模型代码

def self.signIn(form)
  user=Users.where(username: form[:username], password:form[:password])
  return user
end

我的控制器代码是

def sigin_action
@hello = Users.signIn(params)
render :text => @hello
end

但输出总是'#'符号,问题是什么,我搜索了很多但找不到解决方案

3 个答案:

答案 0 :(得分:2)

ActiveRecord#where返回一个关系对象。要访问对象,您可以循环播放,或者如果您只想要一条记录,请拨打first

Users.where(username: form[:username], password: form[:password]).first

答案 1 :(得分:1)

您还有其他一些问题

  
      
  1. 您的Model单数(您的是复数形式)
  2.   
  3. 你提到你想检查你的搜索是否存在 - 肯定你会更好.exists?
  4.   

<强>模型

首先,您需要make sure your model name is Singular

虽然主要原因是Rails约定,但它可以为MVC programming pattern提供更强大的结构。这一点的重要性取决于如何将Rails构建为object orientated框架

在不深入细节的情况下,我只想说,随着Rails的发展,您将开始在整个框架中看到Ruby的面向对象的证据。这意味着每次执行任何方法/创建任何功能时,它都将基于对象

因此,每当你打电话给#34;模型&#34;时,你都没有打电话给一个班级 - 你正在调用一个对象。这就是为什么模型被单独调用的原因 - 它们使您能够从数据库中调用一系列数据,将其全部压缩到模型对象中。在Rails的意义上,它使您能够调用User.find 1来创建新的用户对象。

底线:按照单数名称调用模型


<强>已存在

这可能不是您所需要的,但如果您需要,还有另一个名为.exists?的ActiveRecord方法。这将返回一个布尔值(true / false),具体取决于数据库中查询中是否存在数据。

当你提到你想要check database for SIGNIN时,你可能会更好地使用以下内容:

#app/models/user.rb
class User < ActiveRecord::Base
    def self.signIn(form)
       return self.exists?(username: form[:username], password: form[:password])
    end
end

答案 2 :(得分:0)

render :text => @hello等于

hello = @hello.to_s
render :text => hello

因为ruby#instance.to_s将是#xxxxx类似字符串,所以你得到一些这样的文字。

认为您应该渲染结果:

respond_to do |format|
  format.html
  format.json { render json: @hello }
end