在rails中使用变量作为哈希键

时间:2014-08-22 13:36:51

标签: ruby-on-rails symbols

过去10个小时我一直在尝试这样做,但它没用。

例如:

Event.where(login_screen: Time.now-8.days ..Time.now)

我有一个事件表,login_screen是列名之一。我在下拉菜单中列出了这些内容,并希望将事件名称作为变量。它位于请求参数中,如下所示:params[:segmentation][:first_event]。当我试图给它时:

Event.where(params[:segmentation][:first_event] Time.now-8.days ..Time.now)

......它没有用。我尝试使用to_sym,但这也没有帮助。

如何将变量用作符号?

另一个问题:

:hellohello:之间的区别是什么?

2 个答案:

答案 0 :(得分:2)

它是使用符号作为键的ruby哈希的替代语法

Event.where(login_screen: Time.now-8.days ..Time.now)

相同
Event.where(:login_screen => Time.now-8.days ..Time.now)

因此,如果您将密钥存储在变量中,则需要使用' hash rocket'语法:

Event.where(params[:segmentation][:first_event] => Time.now-8.days ..Time.now)

答案 1 :(得分:0)

这些是在where子句中传递参数的不同方法: -

User.where(["name = ? and email = ?", "Joe", "joe@example.com"])

User.where(["name = :name and email = :email", { name: "Joe", email: "joe@example.com" }])

User.where("name = :name and email = :email", { name: "Joe", email: "joe@example.com" })

使用哈希: -

User.where({ created_at: (Time.now.midnight - 1.day)..Time.now.midnight })

User.where({ name: ["Alice", "Bob"]})

User.where({ name: "Joe", email: "joe@example.com" })