我对Rails还很陌生,而且我也收到了这样的错误:
ActionView::Template::Error (undefined method `comment' for #<Contact:0x000000001057cac8>我在网上查看过很多关于has_many的帖子,但我不认为这是我的错,因为我并不想创建一个评论帖子。
我的contacts_controller.rb:
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
name = params[:contact][:name]
email = params[:contact][:email]
body = params[:contact][:body]
ContactMailer.contact_email(name, email, body).deliver
flash[:success] = "Message sent."
redirect_to new_contact_path
else
flash[:danger] = "Message not sent."
redirect_to new_contact_path
end
end
private
def contact_params
params.require(:contact).permit(:name, :email, :comment)
end
end我的联系人表格:
<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>我的模型,contact.rb:
class Contact < ActiveRecord::Base
validates :name, presence: true
validates :email, presence: true
validates :comment, presence: true
end我的数据库资料:
class CreateContacts < ActiveRecord::Migration[6.0]
def change
create_table :contacts do |t|
t.string :name
t.string :email
t.text :comment
t.timestamps
end
end
end我使用Heroku管理mt应用程序,这是我运行rake db:migrate时的输出
DEPRECATION WARNING: Including LoggerSilence is deprecated and will be removed in Rails 6.1. Please use `ActiveSupport::LoggerSilence` instead (called from <top (required)> at /app/config/application.rb:7)
(1.1ms) SELECT pg_try_advisory_lock(1634294230270099020)
(1.5ms) SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
ActiveRecord::InternalMetadata Load (1.6ms) SELECT "ar_internal_metadata".* FROM "ar_internal_metadata" WHERE "ar_internal_metadata"."key" = $1 LIMIT $2 [["key", "environment"], ["LIMIT", 1]]
(1.2ms) SELECT pg_advisory_unlock(1634294230270099020)而且,这在我的本地主机上运行得很好,但对Heroku却不起作用。是Heroku给了我这个错误,我不知道为什么。
我尝试过的内容(请记住,我是RoR新手):
我从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-12 11:03:43
你有列重命名的问题。不建议重置数据库,因为:
heroku)。您应该做的是创建另一个迁移文件,以便重命名该列,因此在拉动更改时,Rails将检测到新文件,并要求您运行rake db:migrate并解决问题。
def up
# rename_column :contacts, :old_column, :new_column
rename_column :contacts, :comments, :comment
end发布于 2019-09-12 10:53:27
此代码中没有has_many关联。只有文本字段可供注释。如果使用comment而不是comments,则不会出现错误。
在主计长:
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>如果您想创建一个has_many关联,请查看rails指南:多协会
发布于 2019-09-12 10:53:47
我认为您的属性(列)名称是“注释”,您正在尝试传递“注释”。
所以应该是
控制器变化
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>https://stackoverflow.com/questions/57904513
复制相似问题