2

我有一个具有一组嵌套属性的 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 问题。

4

3 回答 3

1

这似乎与用户的关联错误

于 2011-04-21T01:27:21.673 回答
1

这似乎是在数据库中没有关联表的模型的问题。我有同样的情况,我不想将嵌套模型存储在应用程序数据库表中,而是从外部服务获取和保存信息。

class Order < ActiveRecord::Base
  attr_accessor :identifier, :amount
  has_one :credit_card_transaction
end

class CreditCardTransaction
  attr_accessor :number, :expiration_date
  belongs_to :order
end

我不想将信用卡交易对象保存在本地数据库中。并遇到与您相同的问题。请随时发布任何更新。

于 2012-04-12T19:26:55.440 回答
0

这可能是存在另一个具有相同名称“CreditCard”的类的情况,在这种情况下,该类不是 ActiveRecord,因此没有quoted_table_name 方法。

于 2012-07-02T08:54:38.990 回答