我有一个具有一组嵌套属性的 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 控制台创建 CreditCard 对象,但由于某种原因,Rails 表单生成器没有看到该类。
我已经尝试用 form_for 替换 simple_form_for (以及相关的更改),所以我认为这不是 simple_form 问题。