ネストされた属性のセットを持つ Rails 3 フォーム (実際には simple_form) があります。
<%= simple_form_for(@user, :url => the_path(@user)) do |f| %>
...
<%= f.simple_fields_for :credit_card do |c| %>
<%= c.input :number, :label => 'Credit card number' %>
...
<% end %>
...
<% end %>
問題は、:credit_card 属性が CreditCard クラスに属していることです。これは、データベースにクレジット カード データを保存していないため、モデルではありません。/app/models/credit_card.rb でそのクラスを次のように定義しています (この RailsCast ごと):
class CreditCard
include ActiveModel::Validations
include ActiveModel::Conversion
include ActiveModel::Naming
attr_accessor :number, :expiration_month, :expiration_year, :cvv
validates_presence_of :number, :expiration_month, :expiration_year, :cvv
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
user.rb には、次のようなものがあります。
has_one :credit_card
accepts_nested_attributes_for :credit_card
ページにアクセスすると、次のエラーが表示されます。
undefined method `quoted_table_name' for CreditCard:Class
そのエラーをグーグルで検索しても、提案は得られませんでした。Rails Console から CreditCard オブジェクトを作成できますが、何らかの理由で Rails フォーム ジェネレーターがクラスを認識していません。
私はすでに simple_form_for を form_for (および関連する変更) に交換しようとしたので、それは simple_form の問題ではないと思います。