我创建了一个新的 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
根据阅读 Stackoverflow 和一些 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
显然,这是不正常的行为;不应在“新”请求上调用“显示”。
我创建了一个新项目,没有使用sequel-rails gem 和相关配置(使用默认的 ActiveRecord),并且完全相同的代码按预期工作而没有错误。
我花了几个小时进行搜索,但找不到解决方案。我已经擦除了项目并重新启动,并且可以一致地重现所描述的行为。
我知道我可以放弃sequel-gem并回到 AR,但我真的不想这样做。
我很感激在正确的方向上解决这个问题。提前致谢。