【问题标题】:Model creation and association of STI subclassSTI子类的模型创建和关联
【发布时间】: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


    【解决方案1】:

    我不确定这是否是您的问题。但是您的 has_one 关联中缺少as: :event

    class Event < ActiveRecord::Base
        has_one :payoption, as: :event, dependent: :destroy
        accepts_nested_attributes_for :payoption    
    end
    

    【讨论】:

    • 感谢您的回答。这在“new”方法的@event.build_payoption 行中给了我一个“未知属性:event_type”(在我的帖子中添加)。
    • 您真的想要payoption 上的polymorphic association 吗?如果不摆脱:polymorphic =&gt; true
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2012-03-26
    • 1970-01-01
    • 2016-05-21
    相关资源
    最近更新 更多