Ruby on rails 如何修复';未定义的方法错误';方法何时存在?

Ruby on rails 如何修复';未定义的方法错误';方法何时存在?,ruby-on-rails,heroku,Ruby On Rails,Heroku,我是Ruby on Rails的新手,遇到以下错误: ActionView::Template::Error (undefined method `comment' for #<Contact:0x000000001057cac8> 及我的联络表格: <div class="row"> <%= form_for @contact do |f| %> <div class="col-md-4 col-md-offset-4">

我是Ruby on Rails的新手,遇到以下错误:

ActionView::Template::Error (undefined method `comment' for #<Contact:0x000000001057cac8>
及我的联络表格:

<div class="row">
  <%= form_for @contact do |f| %>
    <div class="col-md-4 col-md-offset-4">
      <div class="well">
        <div class="form-group">
          <%= f.label :name %>
          <%= f.text_field :name, class: "form-control" %>
        </div>

        <div class="form-group">
          <%= f.label :email %>
          <%= f.email_field :email, class: 'form-control' %>
        </div>

        <div class="form-group">
          <%= f.label :comment %>
          <%= f.text_area :comment, class: 'form-control' %>
        </div>

        <%= f.submit 'Submit', class: "btn btn-success btn-lg" %>
      </div>
    </div>

  <% end %>
</div>
此外,这在我的本地主机上运行良好,但在Heroku上不起作用。是希罗库给了我错误,我不知道为什么

我尝试过的(请记住,我对RoR是新手):

  • 确保我推给Heroku的是在本地主机上工作的同一版本

  • 确保这不是我路线上的问题

  • 重置数据库

  • 确保拼写一致

  • 我从Heroku日志中得到的错误:

    2019-09-12T11:05:54.009358+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c] Completed 500 Internal Server Error in 226ms (ActiveRecord: 32.0ms | Allocations: 15274)
    2019-09-12T11:05:54.011555+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]
    2019-09-12T11:05:54.011558+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c] ActionView::Template::Error (undefined method `comment' for #<Contact:0x000055682aab6110>
    2019-09-12T11:05:54.011561+00:00 app[web.1]: Did you mean?  comments
    2019-09-12T11:05:54.011563+00:00 app[web.1]: comments=
    2019-09-12T11:05:54.011565+00:00 app[web.1]: comments?):
    2019-09-12T11:05:54.011567+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     14:
    2019-09-12T11:05:54.011570+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     15:         <div class="form-group">
    2019-09-12T11:05:54.011572+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     16:           <%= f.label :comment %>
    2019-09-12T11:05:54.011575+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     17:           <%= f.text_area :comment, class: 'form-control' %>
    2019-09-12T11:05:54.011577+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     18:         </div>
    2019-09-12T11:05:54.011579+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     19:
    2019-09-12T11:05:54.011581+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]     20:         <%= f.submit 'Submit', class: "btn btn-dark btn-block" %>
    2019-09-12T11:05:54.011583+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c]
    2019-09-12T11:05:54.011586+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c] app/views/contacts/new.html.erb:17
    2019-09-12T11:05:54.011588+00:00 app[web.1]: [a382e524-adf1-462b-bff6-bd6cba881a7c] app/views/contacts/new.html.erb:2
    
    2019-09-12T11:05:54.009358+00:00应用程序[web.1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]在226ms内完成了500个内部服务器错误(ActiveRecord:32.0ms |分配:15274)
    2019-09-12T11:05:54.011555+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]
    2019-09-12T11:05:54.011558+00:00应用程序[web.1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]操作视图::模板::错误(未定义的“注释”方法)#
    2019-09-12T11:05:54.011561+00:00应用程序[网站1]:你的意思是?评论
    2019-09-12T11:05:54.011563+00:00应用程序[网站1]:评论=
    2019-09-12T11:05:54.011565+00:00应用程序[网站1]:评论?:
    2019-09-12T11:05:54.011567+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]14:
    2019-09-12T11:05:54.011570+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]15:
    2019-09-12T11:05:54.011572+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]16:
    2019-09-12T11:05:54.011575+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]17:
    2019-09-12T11:05:54.011577+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]18:
    2019-09-12T11:05:54.011579+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]19:
    2019-09-12T11:05:54.011581+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]20:
    2019-09-12T11:05:54.011583+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]
    2019-09-12T11:05:54.011586+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]应用程序/视图/联系人/新建.html.erb:17
    2019-09-12T11:05:54.011588+00:00应用程序[网站1]:[a382e524-adf1-462b-bff6-bd6cba881a7c]应用程序/视图/联系人/新建.html.erb:2
    
    此代码中没有与
    有许多关联。只有文本字段可供注释。如果使用
    注释
    而不是
    注释
    ,则不会出现错误

    在控制器中:

    def contact_params
      params.require(:contact).permit(:name, :email, :comment)
    end
    
    和视图:

    <div class="form-group">
      <%= f.label :comment %>
      <%= f.text_area :comment, class: 'form-control' %>
    </div>
    
    
    
    如果您想创建一个有许多关联的
    ,请查看rails指南:

    我想您的属性(列)名称是“comment”,您正在尝试传递“comments”

    应该如此

    控制器更换

    def contact_params
        params.require(:contact).permit(:name, :email, :comment)
      end
    
    意见转变

    <div class="form-group">
         <%= f.label :comments %>
         <%= f.text_area :comment, class: 'form-control' %>
     </div>
    

    您遇到了列重命名问题。不建议重置数据库,因为:

    • 其他环境或人员已经运行了旧的迁移,如果您使用当前的方法,则必须通知每个人在每个环境中都执行相同的迁移(
      heroku
    • 通过重置数据库,您将丢失数据,我们可能可以为开发或测试这样做,但不能为生产数据这样做
    您应该做的是创建另一个迁移文件以重命名列,因此,当拉动更改时,
    Rails
    将检测到新文件,并要求您运行
    rake db:migrate
    ,并解决问题

    def up
      # rename_column :contacts, :old_column, :new_column
      rename_column :contacts, :comments, :comment
    end
    

    你如何支持你关于该方法存在的说法?为什么不显示
    联系人
    模型源代码?嘿@Beulah,你能给我们看一下模式吗?我已经添加了它们。@beulahakindle你能检查一下heroku上的表格吗?使用heroku pg:psql
    命令连接到数据库。该数据库不存在。
    无法找到本地psql命令。有关安装psql的帮助,请参阅https://devcenter.heroku.com/articles/heroku-postgresql#local-安装程序
    无需更改“f.label:comments”:@Beulahakindle尝试这种方法时会出现什么错误?@Rakesh我知道标签是什么;)您是否也尝试重新启动dyno?我忘了迁移后是否需要我们重新启动dyno或重新部署,因为通常服务器不会像在本地那样接收更改,请尝试重新启动dyno或重新部署(如果您已经运行迁移)。我第一次使用Heroku时也遇到过同样的问题。您使用上面的哪种方法来运行迁移?你注意到输出了吗?您可以再试一次并共享输出吗?我使用了CLI。我注意到在您的架构中有列
    comment
    ,而不是
    comments
    ,因此请检查您的输入错误。
    <div class="form-group">
      <%= f.label :comment %>
      <%= f.text_area :comment, class: 'form-control' %>
    </div>
    
    def contact_params
        params.require(:contact).permit(:name, :email, :comment)
      end
    
    <div class="form-group">
         <%= f.label :comments %>
         <%= f.text_area :comment, class: 'form-control' %>
     </div>
    
    def up
      # rename_column :contacts, :old_column, :new_column
      rename_column :contacts, :comments, :comment
    end