我正在使用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
但输出总是'#'符号,问题是什么,我搜索了很多但找不到解决方案
答案 0 :(得分:2)
ActiveRecord#where返回一个关系对象。要访问对象,您可以循环播放,或者如果您只想要一条记录,请拨打first
Users.where(username: form[:username], password: form[:password]).first
答案 1 :(得分:1)
您还有其他一些问题
- 您的
Model
应单数(您的是复数形式)- 你提到你想检查你的搜索是否存在 - 肯定你会更好
醇>.exists?
<强>模型强>
首先,您需要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