2011-04-20 106 views
2

我有一个Rails 3形式(simple_form,真),其具有一组嵌套属性:导轨3的形状误差: “未定义的方法`quoted_table_name'”

<%= 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定义像这样的类(每this 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问题。

+0

你的控制器代码是什么样的?您将无法保存拥有信用卡的用户......这是发生故障的地方。 – 2011-04-20 23:41:53

+0

我甚至没有保存。当您尝试加载表单时出现此错误。我想我只需要添加一些不嵌套的额外表单域。 – Devin 2011-04-21 14:23:06

+0

我不认为你应该有一个用户。只需要一张信用卡的表格 – 2011-04-21 14:28:09

回答

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 

我不想在本地数据库中保存信用卡交易对象。和你一样得到同样的问题。请保留发布的任何更新。

0

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

相关问题