ruby-on-rails - 使用 ruby​​/rails 将属性重载到方法

标签 ruby-on-rails ruby ruby-on-rails-3

我的用户模型中有一个身份验证方法。

我希望能够像那样调用这个方法

User.authenticate(:email => email@exmaple.com, :password => "123")

User.authenticate(:remember_token => "asdasds41")

正确的做法是什么?

我瞥了一眼 rails 源代码(验证函数),我注意到该函数获取 * 属性,但我没有弄清楚 * 代表什么以及如何读取内部变量

感谢帮助

最佳答案

您所说的方法实际上是对值进行哈希处理。散列中的键(例如 :remember_token、:email 和 :password)充当命名参数,它们在调用语句中出现的顺序中的位置无关紧要。

此外,散列通常需要用大括号括起来(例如 {...}),但在 Ruby 中,方法中的最后一个参数不需要这些大括号。

您所说的 * 属性是一种将动态数量的参数传递给方法的方法,就像通过数组一样。 *attributes 表示法指示 Ruby 将属性扩展为参数列表。

您所说的身份验证方法看起来像这样:

class User

  def self.authenticate(params)
    puts params[:email]
    puts params[:password]
    puts params[:remember_token]
  end

end

除了打印出您收到的参数之外,您显然会做一些其他事情。

关于ruby-on-rails - 使用 ruby​​/rails 将属性重载到方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118204/

相关文章:

html - html类的双引号

python - 使用 Iron.io 安排 Twilio 通话

windows - 抽取 Assets :precompile doesn't work (rails 3. 1.1)

ruby - 对于使用 Redis 的 Ruby on Rails 应用程序,我们是否需要任何 database.yml 文件

ruby-on-rails - 耗尽路由中的 Rails 命名空间

ruby-on-rails - rails 服务器抛出 `require' : cannot load such file -- bigdecimal/util (LoadError)

mysql - 如何将容器网络放入 kubernetes YAML 文件

ruby-on-rails - 带有ajax的rails fields_for

ruby-on-rails - Rails/Devise - 防止垃圾邮件注册?

ruby - 清除输入字段并使用 Watir 输入新信息? ( ruby ,瓦蒂尔)