2016-07-25 11 views
1

Iなど、私が持っているネストされた属性は、レール5に失敗するが、レールで動作する4

「BillApp」と呼ばれる運動は基本的に、それはいくつかの製品を持っているビルだ、と私はIVAを計算し、法案を作ることができる必要があります持っています次のスキーマ:

create_table "bill_items", force: :cascade do |t| 
    t.integer "amount" 
    t.integer "product_id" 
    t.integer "bill_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.index ["bill_id"], name: "index_bill_items_on_bill_id" 
    t.index ["product_id"], name: "index_bill_items_on_product_id" 
    end 

    create_table "bills", force: :cascade do |t| 
    t.string "user_name" 
    t.string "dni" 
    t.date  "expiration" 
    t.float "sub_total" 
    t.float "grand_total" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "products", force: :cascade do |t| 
    t.string "name" 
    t.string "description" 
    t.float "price" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

ビル・モデル:

class Bill < ApplicationRecord 
    has_many :bill_items 
    has_many :products, through: :bill_items 
    accepts_nested_attributes_for :bill_items 
end 

BillItemモデル:

class BillItem < ApplicationRecord 
    belongs_to :product 
    belongs_to :bill 
end 

製品モデル:

class Product < ApplicationRecord 
    has_many :bill_items 
    has_many :bills, through: :bill_items 
end 

ProductsControllerが足場によって生成された通常の1、である、それは問題ではありません。

BillsController:

class BillsController < ApplicationController 
    before_action :set_bill, only: [:show, :update, :destroy, :edit] 

    def new 
    @bill = Bill.new 
    @bill.bill_items.build 
    end 

    def create 
    @bill = Bill.new(bill_params) 
    byebug 
    @bill.save 
    end 

    private 
    def set_bill 
     @bill = Bill.find(params[:id]) 
    end 

    def bill_params 
     params.require(:bill).permit(:user_name, :dni, { bill_items_attributes: [:product_id, :amount, :bill_id] }) 
    end 
end 

そして最後に、ビルの新しいビュー:

<%= form_for(@bill) do |f| %> 
    <div> 
    <%= f.label :user_name %> 
    <%= f.text_field :user_name %> 
    </div> 
    <div> 
    <%= f.label :dni %> 
    <%= f.text_field :dni %> 
    </div> 

    <%= f.fields_for :bill_items do |fp| %> 
    <div> 
     <%= fp.label :product %> 
     <%= fp.collection_select :product_id, Product.all, :id, :name %> 
    </div> 
    <div> 
     <%= fp.label :amount %> 
     <%= fp.number_field :amount %> 
    </div> 
    <% end %> 

    <%= f.submit %></div> 
<% end %> 

それがで失敗しbill.save @を呼び出すようにしようとすると問題がレール5に、非常に具体的です表示されるエラー:

#<ActiveModel::Errors:0x007fd9ea61ed58 @base=#<Bill id: nil, user_name: "asd", dni: "asd", expiration: nil, sub_total: nil, grand_total: nil, created_at: nil, updated_at: nil>, @messages={:"bill_items.bill"=>["must exist"]}, @details={"bill_items.bill"=>[{:error=>:blank}]}> 

しかし、それはRails 4.2.6で完全に機能します。 プロジェクトフォルダ全体がここにあります:https://github.com/TheSwash/bill_app 現在の支店機能/ bills_controller

誰かが何が起こっているのか考えていますか?

+0

を必要とbelongs_toの関連bill_items検証

だ問題 - '@messagesは= {: "bill_items.bill"= > ["must exist"]} 'なので、RoR5とは関係ありません。 – Vucko

+0

@Vucko、あなたには分かりますが、それはレール4の問題です。同じ実装がそのエラーなしで動作します。ここでは、Rails 4と同じコードです:https://github.com/TheSwash/bill_app_rails4 –

答えて

関連する問題