【问题标题】:PG::UndefinedTable: ERROR: missing FROM-clausePG::UndefinedTable: 错误:缺少 FROM 子句
【发布时间】:2015-10-30 17:04:19
【问题描述】:

作为我正在查看的表单的一部分:

<%= form_for(@invitation, method: :post, url: addinvite_path) do |f| %>
  ...
  <label for="email", title="email"></label>
  <%= email_field_tag :email, nil, placeholder: 'Email', autocomplete: 'off', required: true %><br>
  ...

处理表单提交的邀请控制器方法:

def create
  @user = User.find(email: params[:email])
  ...

提交表单会产生指向@user 行的错误:

PG::UndefinedTable: 错误:缺少表“id”的 FROM 子句条目

我不确定是什么导致了这个错误。在@user 行之前放置debugger 可以确认params[:email] 的值。而且在debugger 中,如果我输入User.find(email: params[:email]),它也会返回上面的输入。什么可能导致错误?

【问题讨论】:

  • 尝试使用find_by@user = User.find_by(email: params[:email])

标签: ruby-on-rails ruby postgresql ruby-on-rails-4


【解决方案1】:

这是更新后的副本:

单条记录

def create
  @user = User.where(email: params[:email]).first
end

对于多条记录

 def create
   @user = User.where(email: params[:email])

【讨论】:

    【解决方案2】:

    PG::UndefinedTable: 错误:缺少表“id”的 FROM 子句条目

    默认情况下,find 将查找 id。你需要使用find_by

    @user = User.find_by(email: params[:email])
    

    【讨论】:

      【解决方案3】:

      你可以试试find_by 代替find

      def create
        @user = User.find_by(email: params[:email])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-22
        • 2019-02-17
        • 2016-03-24
        • 2018-06-30
        • 2015-12-19
        • 2015-02-01
        • 2014-09-25
        • 1970-01-01
        相关资源
        最近更新 更多