0

新しい 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 "New Author" リンクをクリックすると、次のエラーが表示されます。

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」は「new」リクエストで呼び出されるべきではありません。

新しいプロジェクトを作成しましたが、sequel-rails gem と関連する構成 (デフォルトの ActiveRecord を使用) を使用しませんでした。まったく同じコードがエラーなしで期待どおりに動作します。

検索に数時間費やしましたが、これに対する解決策が見つかりません。プロジェクトを消去して再起動したところ、一貫して説明されている動作を再現できました。

私は、 sequel-gemをドロップして AR に戻ることができることを知っていますが、実際にはそうしたくありません。

これを解決するための正しい方向へのポイントをいただければ幸いです。前もって感謝します。

4

2 に答える 2

2

Rails のフォーム ヘルパーで Sequel を使用している場合は、おそらくactive_modelSequel プラグイン (Sequel に付属) を使用する必要があります。Sequel::Model.plugin :active_modelモデルクラスをロードする前に使用して、それを行うことができます。その後も問題がある場合は、詳細を投稿してください。この問題は、正しいルートの生成に失敗しているため、Sequel の問題ではなく、Rails の問題のように見えることに注意してください。

于 2016-09-29T20:57:07.380 に答える
0

いくつかの 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 
于 2016-09-29T19:05:24.047 に答える