rails 模型方法只是说 nil
rails model method is just saying nil
这几乎是我在 model 中的第一个方法,所以我认为我在这里遗漏了一些非常基本的部分。但是我2个小时都找不到问题所在。你的帮助将拯救我!
# just simple UserKey(to find user rapidly) model
class UserKey < ActiveRecord::Base
def filter_name(name)
self.where("name LIKE ?", "%#{name}%")
end
然后我在 rails 控制台中执行 @user_key.filter_name("jeongbin")
,它只是说 nil,即使我在 user_keys table 中保存了 jeongbin。当我在我的控制台中使用 @user_key.where("name LIKE ?", "%jeongbin%")
执行此操作时,它正在运行!
我认为我的知识不足,缺少一些基本部分。任何建议都会对我有很大帮助。
修改方法为:-
def self.filter_name(name)
self.where("name LIKE ?", "%#{name}%")
end
在 rails 控制台中,搜索用户为:-
UserKey.filter_name("jeongbin")
def filter_name(name)
将在 UserKey model
的对象上调用,因此在使用 @user_key
调用时显示结果,因为 "jeongbin"
存在于该对象中,否则它是零。
但是要搜索 user_keys table
中的所有记录,应该用 UserKey Model
调用,方法应该是 class 方法,如 def self.filter_name(name)
。
您似乎放错了地方 self
。
class UserKey < ActiveRecord::Base
def self.filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
我通常更喜欢这种表示法,以完成同样的事情,因为它将所有内容组织到一个位置,并随着代码库的增长减少 self.
的数量。
class UserKey < ActiveRecord::Base
class << self
def filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
end
你需要这样称呼它
UserKey.filter_name 'some_name'
如果您想将其保留为实例方法,请使用:
class UserKey < ActiveRecord::Base
class << self
def filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
def filter_name(name)
self.class.filter_name(name)
end
end
这几乎是我在 model 中的第一个方法,所以我认为我在这里遗漏了一些非常基本的部分。但是我2个小时都找不到问题所在。你的帮助将拯救我!
# just simple UserKey(to find user rapidly) model
class UserKey < ActiveRecord::Base
def filter_name(name)
self.where("name LIKE ?", "%#{name}%")
end
然后我在 rails 控制台中执行 @user_key.filter_name("jeongbin")
,它只是说 nil,即使我在 user_keys table 中保存了 jeongbin。当我在我的控制台中使用 @user_key.where("name LIKE ?", "%jeongbin%")
执行此操作时,它正在运行!
我认为我的知识不足,缺少一些基本部分。任何建议都会对我有很大帮助。
修改方法为:-
def self.filter_name(name)
self.where("name LIKE ?", "%#{name}%")
end
在 rails 控制台中,搜索用户为:-
UserKey.filter_name("jeongbin")
def filter_name(name)
将在 UserKey model
的对象上调用,因此在使用 @user_key
调用时显示结果,因为 "jeongbin"
存在于该对象中,否则它是零。
但是要搜索 user_keys table
中的所有记录,应该用 UserKey Model
调用,方法应该是 class 方法,如 def self.filter_name(name)
。
您似乎放错了地方 self
。
class UserKey < ActiveRecord::Base
def self.filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
我通常更喜欢这种表示法,以完成同样的事情,因为它将所有内容组织到一个位置,并随着代码库的增长减少 self.
的数量。
class UserKey < ActiveRecord::Base
class << self
def filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
end
你需要这样称呼它
UserKey.filter_name 'some_name'
如果您想将其保留为实例方法,请使用:
class UserKey < ActiveRecord::Base
class << self
def filter_name(name)
where 'name LIKE ?', "%#{name}%"
end
end
def filter_name(name)
self.class.filter_name(name)
end
end