【问题标题】:Rails 4.2 Sequel Model - Form_for on new not working as expectedRails 4.2 Sequel Model - 新的 Form_for 没有按预期工作
【发布时间】:2016-01-28 16:34:10
【问题描述】:

我创建了一个新的 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

很明显这是不正常的行为;不应在“新”请求上调用“show”。

我创建了一个新项目,没有使用 sequel-rails gem 和相关配置(使用默认 ActiveRecord),并且完全相同的代码按预期工作而没有错误。

我花了几个小时进行搜索,但找不到解决方案。我已擦除项目并重新启动,并且可以一致地重现所描述的行为。

我知道我可以放弃 sequel-gem 并返回 AR,但我真的不想这样做。

我希望能在正确的方向上解决这个问题。提前致谢。

【问题讨论】:

    标签: ruby-on-rails ruby sequel sequel-gem


    【解决方案1】:

    如果您将 Sequel 与 Rails 的表单助手一起使用,您可能应该使用 active_model Sequel 插件(随 Sequel 提供)。您可以在加载模型类之前使用Sequel::Model.plugin :active_model 来执行此操作。如果之后仍有问题,请发布更多详细信息。请注意,问题似乎是 Rails 问题,而不是 Sequel 问题,因为失败在于生成正确的路线。

    【讨论】:

      【解决方案2】:

      只需包含更多 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 
      

      【讨论】:

        猜你喜欢
        • 2017-08-20
        • 2018-04-24
        • 1970-01-01
        • 2016-03-31
        • 2013-09-15
        • 1970-01-01
        • 1970-01-01
        • 2020-06-06
        • 2021-09-23
        相关资源
        最近更新 更多