У меня есть модель продукта с атрибутом: image_url, который я пытаюсь проверить:
class Product < ApplicationRecord
validates :image_url, allow_blank: true, format:
{ with: /\w+\.(gif|jpg|png)\z/i,
message: "Image must have GIF, JPG, or PNG extension"
}
end
Цель проверки формата - разрешить всем URL-адресам заканчиваться на .gif, .png или .jpg. Регулярное выражение, кажется, работает нормально, вот ссылка Rubular:
http://rubular.com/r/GQx0oAaI1x
Но при попытке получить доступ к моему приложению (любому представлению или консоли) я получаю:
undefined local variable or method `image_url' for #<Class:0x007f84c9baf0b8>
Это моя схема:
create_table "products", force: :cascade do |t|
t.string "title"
t.text "description"
t.string "image_url"
t.decimal "price", precision: 8, scale: 2
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Все продукты, представленные в моей базе данных, имеют image_url
. Я не понимаю, почему ошибка говорит мне, что image_url
- неизвестный метод для Class
, а не для Product object
.
Это журнал моего сервера:
Started GET "/products" for 127.0.0.1 at 2018-09-05 14:09:55 +0200
Processing by ProductsController#index as HTML
Completed 500 Internal Server Error in 21ms (ActiveRecord: 3.8ms)
NameError - undefined local variable or method `image_url' for <Class:0x00007fc3651c1e40>:
app/models/product.rb:5:in `<class:Product>'
app/models/product.rb:1:in `<main>'
app/controllers/products_controller.rb:7:in `index'
Это мое индексное действие в ProductsController:
def index
@products = Product.all
end
А это мой index.html.haml
:
%h1 Your Pragmatic Catalog
%ul.catalog
- @products.each do |product|
%li
= image_tag(product.image_url)
%h2= product.title
%p
= sanitize(product.description)
.price
= number_to_currency(product.price)
Может ли кто-нибудь помочь мне понять, в чем проблема?
Я использую ruby 2.5.1 с Rails 5.2.1.