【发布时间】:2014-02-09 16:58:31
【问题描述】:
我有一个 Event 模型,它有一个 Payoption,它可以是使用 STI 子类的不同类型,如下所示:
class Event < ActiveRecord::Base
has_one :payoption, dependent: :destroy
accepts_nested_attributes_for :payoption
end
class Payoption < ActiveRecord::Base
belongs_to :event, :polymorphic => true
PAY_OPTION = ["BankPayoption", "CashPayoption"]
end
class BankPayoption < Payoption
belongs_to :event
end
class CashPayoption < Payoption
belongs_to :event
end
我正在像这样在同一个控制器中创建一个事件和一个 Cash/BankPayoption,但在开发过程中仍然存在一些硬编码和功能缺失:
def new
@event = Event.new
@event.build_payoption
end
def create
@event = Event.new(event_params)
@event.user_id = current_user.id
if params[:event][:payoption_attributes][:type] == "BankPayoption"
@payoption = BankPayoption.new
@payoption.phone = "0734176395"
@payoption.event = @event
@payoption.save
@event.payoption = @payoption
end
@event.save
redirect_to @event
end
Event 和 BankPayoption 都被创建,并且 BankPayoption 获得了正确的 Event ID,但是 Event 根本没有获得任何 Payoption ID 并且保持为 nil。认为 STI/多态性存在问题,但不知道如何解决。
提前致谢
【问题讨论】:
标签: ruby-on-rails polymorphism subclass single-table-inheritance