#ruby-on-rails #heroku #undefined
#ruby-on-rails #heroku #не определено
Вопрос:
Я разрабатываю простое приложение для создания новостных статей. Он отлично работает в разработке. Я пытаюсь опубликовать в Heroku. Всякий раз, когда я пытаюсь перейти к «новому» пути, который приводит меня к форме для создания нового «сообщения», я получаю эту ошибку в своих журналах:
ActionView::Template::Error (undefined method `level' for #<Post:0x007f624eca42e0>):
«уровень» — это столбец в моей таблице «сообщения», который я использую, чтобы отслеживать, будет ли данная статья отображаться на видном месте или нет. В процессе разработки это работает так, как и должно.
Не совсем уверен, что происходит. Я несколько раз пытался запустить rake db: migrate.
Вот полный журнал heroku:
2016-10-21T22:16:02.717948 00:00 app[web.1]: D, [2016-10-21T22:16:02.717866 #3] DEBUG -- : [a4723811-33bd-4c11-b62f-7c3401f77048] User Load (1.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]]
2016-10-21T22:16:02.719426 00:00 app[web.1]: I, [2016-10-21T22:16:02.719357 #3] INFO -- : [a4723811-33bd-4c11-b62f-7c3401f77048] Rendering posts/new.html.erb within layouts/application
2016-10-21T22:16:02.728995 00:00 app[web.1]: I, [2016-10-21T22:16:02.728898 #3] INFO -- : [a4723811-33bd-4c11-b62f-7c3401f77048] Rendered posts/_form.html.erb (9.2ms)
2016-10-21T22:16:02.729133 00:00 app[web.1]: I, [2016-10-21T22:16:02.729070 #3] INFO -- : [a4723811-33bd-4c11-b62f-7c3401f77048] Rendered posts/new.html.erb within layouts/application (9.6ms)
2016-10-21T22:16:02.729427 00:00 app[web.1]: I, [2016-10-21T22:16:02.729362 #3] INFO -- : [a4723811-33bd-4c11-b62f-7c3401f77048] Completed 500 Internal Server Error in 14ms (ActiveRecord: 1.4ms)
2016-10-21T22:16:02.730972 00:00 app[web.1]: F, [2016-10-21T22:16:02.730889 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048]
2016-10-21T22:16:02.731067 00:00 app[web.1]: F, [2016-10-21T22:16:02.730980 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] ActionView::Template::Error (undefined method `level' for #<Post:0x007f624eca42e0>):
2016-10-21T22:16:02.731308 00:00 app[web.1]: F, [2016-10-21T22:16:02.731223 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 11: <%= f.input :description, class: 'form-control' %>
2016-10-21T22:16:02.731351 00:00 app[web.1]: F, [2016-10-21T22:16:02.731295 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 12: </div>
2016-10-21T22:16:02.731420 00:00 app[web.1]: F, [2016-10-21T22:16:02.731356 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 13: <div class="field">
2016-10-21T22:16:02.731476 00:00 app[web.1]: F, [2016-10-21T22:16:02.731421 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 14: <%= f.input :level, class: 'form-control' %>
2016-10-21T22:16:02.731528 00:00 app[web.1]: F, [2016-10-21T22:16:02.731477 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 15: </div>
2016-10-21T22:16:02.731585 00:00 app[web.1]: F, [2016-10-21T22:16:02.731530 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 16: <div class="actions">
2016-10-21T22:16:02.731652 00:00 app[web.1]: F, [2016-10-21T22:16:02.731585 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] 17: <%= f.label :photo %>
2016-10-21T22:16:02.731705 00:00 app[web.1]: F, [2016-10-21T22:16:02.731648 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048]
2016-10-21T22:16:02.731774 00:00 app[web.1]: F, [2016-10-21T22:16:02.731726 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] app/views/posts/_form.html.erb:14:in `block in_app_views_posts__form_html_erb___305077094715289752_70030112058800'
2016-10-21T22:16:02.731841 00:00 app[web.1]: F, [2016-10-21T22:16:02.731794 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] app/views/posts/_form.html.erb:1:in `_app_views_posts__form_html_erb___305077094715289752_70030112058800'
2016-10-21T22:16:02.731917 00:00 app[web.1]: F, [2016-10-21T22:16:02.731859 #3] FATAL -- : [a4723811-33bd-4c11-b62f-7c3401f77048] app/views/posts/new.html.erb:5:in `_app_views_posts_new_html_erb___2217823637252593740_70030112076460'
Вот мой posts_controller:
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
before_action :authenticate_user!, only: [:edit, :update, :destroy, :new, :create]
# GET /posts
# GET /posts.json
def index
@posts = Post.most_recent
end
# GET /posts/1
# GET /posts/1.json
def show
end
# GET /posts/new
def new
@post = Post.new
end
# GET /posts/1/edit
def edit
end
# POST /posts
# POST /posts.json
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
format.html { redirect_to post_path(@post), notice: 'Post was successfully created.' }
format.json { render :show, status: :created, location: @post }
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
# PATCH/PUT /posts/1
# PATCH/PUT /posts/1.json
def update
respond_to do |format|
if @post.update(post_params)
format.html { redirect_to @post, notice: 'Post was successfully updated.' }
format.json { render :show, status: :ok, location: @post }
else
format.html { render :edit }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
# DELETE /posts/1
# DELETE /posts/1.json
def destroy
@post.destroy
respond_to do |format|
format.html { redirect_to posts_url, notice: 'Post was successfully destroyed.' }
format.json { head :no_content }
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_post
@post = Post.friendly.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def post_params
params.require(:post).permit(:title, :content, :description, :photo, :level)
end
end
Вот моя форма, которая устраняет проблему (я использую драгоценный камень simple_form):
<%= simple_form_for @post, :html => {:multipart => true} do |f| %>
<%= f.error_notification %>
<div class="field">
<%= f.input :title, class: 'form-control' %>
</div>
<div class="field">
<%= f.input :content, class: 'form-control' %>
</div>
<div class="field">
<%= f.input :description, class: 'form-control' %>
</div>
<div class="field">
<%= f.input :level, class: 'form-control' %>
</div>
<div class="actions">
<%= f.label :photo %>
<%= f.file_field :photo %>
<br />
</div>
<div class="actions">
<%= f.button :submit, :class => 'btn btn-success' %>
</div>
<% end %>
К вашему сведению, я также использую paperclip. Кто-нибудь может увидеть, что здесь происходит? Я в тупике. Спасибо!
Комментарии:
1. Можете ли вы опубликовать схему
posts
таблицы?2. > Post (идентификатор: целое число, созданное по дате-времени, обновленное по дате-времени, заголовок: строка, содержимое: строка, описание: строка, идентификатор пользователя: целое число, slug: строка, имя_файла_файла: строка, photo_content_type: строка, размер_файла_файла: целое число, photo_updated_at: дата-время, уровень: строка) Это то, что написано в консоли. «Уровень» есть, и он работал в разработке весь день.
3. Может быть глупо. Вы запускали
heroku run rake db:migrate
?4. Это был мой вопрос
5. можете ли вы опубликовать распечатку вашей модели post с рабочей консоли