2016-11-01 11 views
0

Rails 5アプリケーションでモデルの問題を使用する方法を学習しようとしています。 Rails 5、懸念 - 形式でメソッドを使用する方法

私はとネストされたモデルがあります:私のモデル/懸念フォルダに

class Stance::Cost < ApplicationRecord 

    include HasCostPolicy 

    belongs_to :organisation, inverse_of: :cost 

を、私が持っている:

module HasCostPolicy 
    extend ActiveSupport::Concern 
    included do 
    enum cost_sharing: { 
        proportionately: 1, 
        equally: 2, 
        no_contribution: 3, 
        bear_all_costs: 4, 
        other_cost_policy: 5 

        } 
    end 
end 

は、次にコストのための私のネストされた形で、私が持っている:

<%= f.input :ip_expenses, as: :select, label: "Responsibility for IP expenses", collection: Stance::Cost.cost_sharing.map { |key, val| [key.humanize, key] } %> 

組織フォーム(ネストされたコストフィールドを使用)をレンダリングしようとすると、次のようなエラーが表示されます。

undefined method `cost_sharing' for #<Class:0x007ffe7eaef220> 

入れ子になったフォームでHasCostPolicyの問題を使用するには、何が必要ですか?

+0

は 'スタンスです:: Cost.cost_sharing'はレールコンソールで定義されていますか? –

+0

@maxpleaner - いいえ。 c = Stance :: Cost.New =>#<スタンス::コストid:nil、organisation_id:nil、ip_expenses:nil、ip_note:nil、diligence_expenses:nil、diligence_note:nil、created_at:nil、updated_at:nil> 2.3.1p112:009> c.cost_sharing = 1 NoMethodError:#スタンス::コスト:0x007f9c5e7f28d8> – Mel

答えて

1

奇妙なことに、私はフォーム内でcost_sharingを複数にする必要があります。

私はなぜ理解していないが、これは動作します:

<%= f.input :ip_expenses, as: :select, label: "Responsibility for IP expenses", collection: Stance::Cost.cost_sharings.map { |key, val| [key.humanize, key] } %> 
+0

のクラス( 'Stance :: Cost')に対して未定義のメソッド' cost_sharing = 'が複数のメソッドが定義され、返されますすべての可能な値を持つハッシュしかし、インスタンス( 'Stance :: Cost.new')では単数形が定義され、文字列が返されます。 –

+0

私はその意味を理解していません。この方法は、懸念事項では複数形として定義されていません。 enumは "cost_sharing"(単数)として定義されます。 – Mel

+0

ええ、レールはクラスのための複数の方法を作成します。 –

関連する問題