28910


現在、Railsアプリを製作しています。  
accepts_nested_attributes_forを使用しているのですが、【subjects_controller.rb】のsaveメソッドの前に、子モデル(cost)のカラムの値を取得するにはどうすれば良いでしょうか？

やりたい事は、子モデル(cost)のカラムの値を取得して、四則演算を行い、その後saveしたいです。  
※ 以下のカラムの値は投稿用のため、意図的にnilにしています。

・環境  
Rails 4.2.3  
Gem cocoonを使用

・親モデル  
subject  

・子モデル  
cost  

【subject.rb】 ※親モデル

[code]

    has_many :costs, dependent: :destroy
    accepts_nested_attributes_for :costs, allow_destroy: true
    
[/code]

【subjects_controller.rb】

[code]

    def create
        @subject = Subject.new(subject_params)
    
        ※この位置で子モデル(cost)のカラムの値を参照したいです。
        raise @subject.inspect、をしてみると親モデル(subjects)の<Subject id: nil, user_id: nil, created_at: nil, updated_at: nil, customer: nil, subject: nil, remarks: nil>しか入っておらず、子モデル(cost)の値を参照できないです。
    
        respond_to do |format|
          if @subject.save
    ※途中省略
    
    private
    
    def subject_params
          params.require(:subject).permit(
            :user_id, :customer, :subject, :remarks,
            costs_attributes: [:id, :user_id, :subject_id, :material, :product, :pressure, :size, :quantity, :hvk, :fujii, :imamoto, :unit_price, :price_total, :hvk_total, :fujii_total, :imamoto_total, :selling_price, :selling_price_total, :grossmargin_rate, :gross_profit, :price_total, :remarks, :sign, :_destroy]
          )
    end
    
[/code]

【cost.rb】 ※子モデル

[code]

    belongs_to :subject
    
[/code]

何卒宜しくお願い致します。

### ※ 追記

四則演算させたい部分はnilになっていますが、以下を返します。

[code]

    def create
        @subject = Subject.new(subject_params)
        @hoge = @subject.costs
        raise @hoge.inspect
    
[/code]

の結果です。

`<ActiveRecord::Associations::CollectionProxy [#<Cost id: nil, user_id: nil,
customer_id: nil, material: nil, product: "商品A", pressure: nil, size: nil,
quantity: "10", hvk: "70", fujii: "80", imamoto: "100", unit_price: nil,
price_total: nil, hvk_total: nil, fujii_total: nil, imamoto_total: nil,
selling_price: "800", selling_price_total: nil, grossmargin_rate: nil,
gross_profit: nil, remarks: nil, created_at: nil, updated_at: nil, sign: "1",
subject_id: nil>]>`


CC BY-SA 3.0
2016-09-15T08:41:44.217
28904
2016-09-15T14:58:54.707
2016-09-15T14:54:50.007
12323
12323
question
ruby-on-rails ruby rails-activerecord
Railsのaccepts_nested_attributes_forの使い方を教えてください。


`accepts_nested_attributes_for`についてはまったく関係ありません。  
（というか`accepts_nested_attributes_for`についてはうまくいっているようです）

has_manyな子モデルを参照する場合ActiveRecordでは、  
`hoge.foos`という形になりますので、

`subject.costs`で取得できます。  
あとは得られたデータで四則演算しましょう。

`subject.costs`は配列のような動きをします(もちろん他の機能もあります)。  
`costs`が必ずひとつという保証があるのであれば`subject.costs.last.sign`とすればよいですし、複数あるなら適切に`each`などで回して計算しましょう。


CC BY-SA 3.0
2016-09-15T14:48:49.403
28910
2016-09-15T14:58:54.707
2016-09-15T14:58:54.707
9008
9008
28904
answer