Чтобы не вводить те же ссылки на других страницах - PullRequest
0 голосов
/ 01 мая 2020

На моем сайте, когда вы создаете страницу продукта, вы можете загружать файлы или добавлять ссылки. Чтобы запретить вводить те же ссылки на странице тот же продукт , есть это

validate :check_download_links_unique!

    def check_download_links_unique!
      urls = download_links.reject(&:marked_for_destruction?).map!(&:url).compact.to_a
      errors.add(
        :download_links, :links_repetition
      ) if urls.uniq.length != urls.length
    end

Теперь я хочу проверить еще одну вещь. Я хочу запретить ввод той же ссылки , уже добавленной на страницу другого продукта .

Я пытался добавить в models / download_link.rb что-то подобное

validates :url, uniqueness: true

Но он также блокирует загрузку файлов . Любые советы?

модели

# == Schema Information
#
# Table name: download_links
#
#  id                :integer          not null, primary key
#  url               :string
#  broken            :boolean          default(FALSE), not null
#  book_id           :integer
#  file_file_name    :string
#  file_content_type :string

# == Schema Information
#
# Table name: books
#
#  id               :integer          not null, primary key
#  title            :string           not null
#  slug             :string           not null
#  description      :text             not null
#  user_id          :integer
#  downloads_count  :integer          default(0), not null

Ответы [ 2 ]

0 голосов
/ 02 мая 2020

Вы можете установить allow_nil: true на uniqueness: true и убрать url перед проверкой, чтобы избежать пустого URL.

0 голосов
/ 01 мая 2020

Возможно, потому что при загрузке файла url становится nil, что по умолчанию не разрешено с uniqueness: true.

Как сказано в документации , вы должны установить allow_nil: true опция для uniqueness: true, чтобы пропустить проверку уникальности, когда атрибут nil.


Если вы хотите защитить от пустой строки, вы можете сделать что-то вроде этого:

validates :url, format: {with: /\S+/}, uniqueness: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...