Rails 4.2 Sequel Model - Form_for на новом не работает как положено

Я создал новый проект Rails 4.2, настроил Sequel Gem в соответствии с документами и выполнил следующую команду, чтобы настроить мой первый раздел проекта:

rails generate scaffold Author nom_de_plume:string real_name:string email_address:string code_of_conduct_date:datetime created_at:datetime updated_at:datetime --orm=sequel

rake db:migrate

Основываясь на чтении Stackru и некоторых ссылках Google, мой скелет модели выглядит следующим образом:

class Author < Sequel::Model
  # ---
  extend ActiveModel::Naming
  include ActiveModel::Conversion
  def persisted?
    true
  end
  # ---
  plugin :validation_helpers
  plugin :after_initialize
  # ---
  def validate
    super
    validates_presence [:nom_de_plume, :real_name, :email_address, :code_of_conduct_date]
    validates_unique([:nom_de_plume, :email_address])      end # def validate
  # ---
  def after_initialize
    super
  end # def after_initialize
end # class Author < Sequel::Model

Контроллер еще не поставлен / изменен. Когда я захожу на http://localhost:3000/authors/ все работает, как ожидалось.

Однако, когда я нажимаю ссылку http://localhost:3000/authors/new "Новый автор", я получаю следующую ошибку:

Showing /project/app/views/authors/_form.html.erb where line #1 raised:

No route matches {:action=>"show", :controller=>"authors", :id=>nil} missing required keys: [:id]

Extracted source (around line #1):
1 <%= form_for(@author) do |f| %>
2
3 <% if @author.errors.any? %>
4 <div id="error_explanation">
5 <h2><%= pluralize(@author.errors.count, "error") %> prohibited this author from being saved:</h2>
6

Очевидно, это нарушенное поведение; "show" не должно вызываться по "новому" запросу.

Я создал новый проект, не использовал гем сиквел-рельсов и связанную с ним конфигурацию (используя ActiveRecord по умолчанию), и тот же код работает, как и ожидалось, без ошибок.

Я провел пару часов в поисках и не могу найти решение для этого. Я стер проект и перезапустил, и могу воспроизвести описанное поведение.

Я знаю, что могу просто бросить сиквел-джем и вернуться в AR, но я бы действительно не хотел этого делать.

Я был бы признателен за правильное направление решения этой проблемы. Заранее спасибо.

2 ответа

Вы, вероятно, должны использовать active_model Плагин Sequel (поставляется с Sequel), если вы используете Sequel с помощниками форм Rails. Ты можешь использовать Sequel::Model.plugin :active_model перед загрузкой вашей модели классов, чтобы сделать это. Если после этого у вас все еще есть проблемы, пожалуйста, опишите подробнее. Обратите внимание, что проблема, по-видимому, связана с проблемой Rails, а не сиквелом, поскольку ошибка заключается в создании правильного маршрута.

Просто включите еще несколько подмодулей ActiveModel, полный список здесь:

class Author < Sequel::Model

  extend ActiveModel::Naming
  include ActiveModel::Conversion
  include ActiveModel::Model
  include ActiveModel::AttributeMethods
  include ActiveModel::Dirty
  include ActiveModel::Serialization

  def persisted?
    true
  end

  # ...

end 
Другие вопросы по тегам