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