Ответы пользователя по тегу Ruby on Rails
  • ActiveRecord интересный кейс?

    @kir_vesp
    Web Developer
    Всё логично же. Сначала создаётся первая связующая модель(id 12), потом при попытке создать вторую видим, что уже с данной записью a существует связь у другой модели из b. Так что, да, оно должно ломаться. Фактически, ваш валидатор проверяет, чтобы у вас была связь one-to-one-through(правда, непонятно зачем такое).

    UPD: не объявлены полностью связи в моделях, должно быть так:
    class A < ActiveRecord::Base
    has_many :ab_relationships,  class_name: ABRelationship
    has_many :bs, through: :ab_relationships, source: :b
    end
    
    class B < ActiveRecord::Base
    has_many :ab_relationships,  class_name: ABRelationship
    has_many :as, through: :ab_relationships, source: :a
    end


    UPD2: Причины пока неизвестны, но выглядит очень необычно
    a = A.create!(b_ids: [1])
      B Load (0.2ms)  SELECT  `bs`.* FROM `bs` WHERE `bs`.`id` = 1 LIMIT 1
       (0.1ms)  BEGIN
      ABRelationship Load (0.4ms)  SELECT  `ab_relationships`.* FROM `ab_relationships` WHERE `ab_relationships`.`a_id` IS NULL  ORDER BY `ab_relationships`.`id` ASC LIMIT 1
      SQL (21.7ms)  INSERT INTO `as` (`created_at`, `updated_at`) VALUES ('2015-10-10 08:43:24', '2015-10-10 08:43:24')
      ABRelationship Load (0.6ms)  SELECT  `ab_relationships`.* FROM `ab_relationships` WHERE `ab_relationships`.`a_id` = 4  ORDER BY `ab_relationships`.`id` ASC LIMIT 1
      SQL (0.5ms)  INSERT INTO `ab_relationships` (`b_id`, `a_id`, `created_at`, `updated_at`) VALUES (1, 4, '2015-10-10 08:43:24', '2015-10-10 08:43:24')
      ABRelationship Load (0.6ms)  SELECT  `ab_relationships`.* FROM `ab_relationships` WHERE `ab_relationships`.`a_id` = 4  ORDER BY `ab_relationships`.`id` ASC LIMIT 1
       (85.8ms)  ROLLBACK
    ActiveRecord::RecordInvalid: Validation failed: Ab relationships error


    UPD3: В итоге, логика Rails сводится здесь к следующему. Создадим запись в связывающей таблице, а потом перед сохранением основной записи запустим все валидации, в том числе и у связанных записей.
    Ответ написан
  • Как реализовать всплывающее окно в Rails?

    @kir_vesp
    Web Developer
    Самый простой путь: подключаете модуль для окон, либо bootstrap сразу. Прописываете необходимые пути в asssets для js и css. После чего просто вызываете и создаёте их. Это второй глупый вопрос от вас. Рекомендую для начала внимательно прочитать гайды по рельсам, чтобы не путать тёплое с мягким. Рельсы это фрэймворк для бэк-энда, ему глубоко и сильно фиолетово, что и как у вас на фронтэнде, пока вы используете допустимый для него стек технологий. По умолчанию на фронт у него доступны HTML, CSS, SCSS, JS, CoffeeScript.

    UPD: у вас есть layout-ы: application и иные, которые вы сделаете сами. Для них есть имя_лэйаута.css и имя_лэйаута.js. В них вы должны подключать плагины. Плагины должны быть в соответственных assets(stylesheets or javascripts or images). Для некоторых вещей есть сразу собранные гемы, которы подключать ещё проще. Для bootstrap точно есть.
    Плагины лучше всего размещать в отдельных папках и для них дописывать строку:
    *= require_tree ./путь_к_директории_плагина в css
    //= require_tree ./путь_к_директории_плагина в js
    .
    Ответ написан
  • Как решить проблему с кодировкой Rails 4, Mysql?

    @kir_vesp
    Web Developer
    Возможно надо у самого мускуля в настройках на серваке исправить дефолтную кодировку на обычную utf-8, тогда должно всё заработать(вчера была похожая проблема, решилось сменой базовой кодировки).
    Ответ написан
    Комментировать