【问题标题】:Where query in rails在哪里查询rails
【发布时间】:2020-12-19 01:36:36
【问题描述】:

我有一个带有两个表的 rails 应用程序。一种是用户(设计模型),带有电子邮件和密码。另一个是属于_to用户的产品。

当用户登录应用程序(使用他的电子邮件和密码)时,我希望我的产品控制器进行过滤,以便登录用户只能看到共享当前登录的完全相同的电子邮件域的其他用户注册的产品在用户 (current_user) 中。

例如:

  • 登录为:test@gmail.com

  • 产品可见:

    • 注册人:test2@gmail.com
    • 注册人:test3@gmail.com
  • 产品不可见:

    • 注册人:test4@yahoo.com
    • 注册人:test5@yahoo.com

有可能吗?我知道 .where 方法,但我在语法上苦苦挣扎。

【问题讨论】:

    标签: ruby-on-rails sqlite devise


    【解决方案1】:

    这样的事情怎么样:

    email_domain = current_user.email.split("@").last 
    @products = Products.joins(:users).where("users.email like ?", "%#{email_domain}")
    

    第一行获取电子邮件域。 第二行在user.emails 和email_domain 的一部分之间进行检查。这里的关键字符是%,用作通配符。

    【讨论】:

    • 嘿@amoks。 Tks 的答案,但它仍然不起作用,因为它试图在我的产品表上找到一个 'user.email' - ActionView::Template::Error (SQLite3::SQLException: no such column: user.email)。
    • @ale 很接近——添加了连接并更新了 where 子句。
    • 啊,是的!谢谢@dbugger。完全忘记了加入?。
    • 感谢@amoks 和@dbugger 的帮助!最后一件事,我想知道如何使无法直接通过 URL 访问另一个域的产品。
    • @Ale,在表演中,@product = Products.joins(:users).where("users.email like ?", "%#{email_domain}").find(params[:id])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2017-03-23
    • 1970-01-01
    相关资源
    最近更新 更多