테이블 조인레일 5 : 업데이트 속성에서이 많은 통해 내가 현재 인터넷 쇼핑몰에서 일하고 있어요 내가 레일 5. 나는 다음과 같은 모델과 관계 한 사용하고
# Products
class Product < ApplicationRecord
has_many :product_variants
has_many :variants, through: :product_variants
...
class Variant < ApplicationRecord
has_many :product_variants
has_many :products, through: :product_variants
...
# My join table between Product and Variant
class ProductVariant < ApplicationRecord
belongs_to :price, optional: true
belongs_to :product, optional: true
belongs_to :variant, optional: true
내 ProductVariant
모델은이를 내가 업데이트 할 수있는 추가 속성 인 t.integer "quantity"
. form_for
에서이 속성을 업데이트 할 때 약간 손실됩니다.
= form_for @product, html: { method: :patch } do |product_builder|
= product_builder.fields_for :product_variants, product_variant do |variant_builder|
= variant_builder.hidden_field :variant_id, value: product_variant.variant.id
= variant_builder.number_field :quantity
= variant_builder.submit
를하지만 제대로 작동하지 않습니다 : 폼
나의 현재 솔루션은 (내가 HAML 사용) 다음과 같습니다. 필자의 조인 테이블에 ID 열이 있으면 쉽게 느껴졌 겠지만 데이터베이스에 중복 된 것으로 생각됩니다. 제출 버튼을 클릭하면 현재 ProductVariant
의 또 다른 인스턴스가 생성 된 것으로 보입니다.
내 연결 테이블에서 내 quantity
특성을 올바르게 업데이트하기 위해 필요한 사항은 무엇입니까? 완료
를 들어
이 내가 제출을 클릭하면 로그인됩니다 것입니다 : 당신은 has_many :though
을하고있는
Parameters: {"utf8"=>"✓", "authenticity_token"=>"uisxjfvj9LxZVJWcDVos66tJWNfHkld5+/gdfGv1D2WZsrLJcH7KLxb5eSDAYIL23mEEho18Pv/53bSEP8cC9A==", "product"=>{"product_variants_attributes"=>{"0"=>{"variant_id"=>"1", "product_id"=>"11", "quantity"=>"20", "id"=>""}}}, "commit"=>"Update Product variant", "id"=>"11"} Product Load (0.1ms) SELECT "products".* FROM "products" WHERE "products"."id" = ? LIMIT ? [["id", 11], ["LIMIT", 1]] Unpermitted parameter: :id (0.1ms) begin transaction Brand Load (0.2ms) SELECT "brands".* FROM "brands" WHERE "brands"."id" = ? LIMIT ? [["id", 4], ["LIMIT", 1]] Variant Load (0.2ms) SELECT "variants".* FROM "variants" WHERE "variants"."id" = ? LIMIT ? [["id", 1], ["LIMIT", 1]] Brand Exists (0.2ms) SELECT 1 AS one FROM "brands" WHERE "brands"."name" = ? AND ("brands"."id" != ?) LIMIT ? [["name", "Fredric Malle"], ["id", 4], ["LIMIT", 1]] SQL (0.4ms) INSERT INTO "product_variants" ("variant_id", "product_id", "quantity") VALUES (?, ?, ?) [["variant_id", 1], ["product_id", 11], ["quantity", 20]] (2.7ms) commit transaction (0.2ms) SELECT COUNT(*) FROM "note_parts" INNER JOIN "product_note_parts" ON "note_parts"."id" = "product_note_parts"."note_part_id" WHERE "product_note_parts"."product_id" = ? [["product_id", 11]] Redirected to http://localhost:3000/products/11/edit Completed 302 Found in 15ms (ActiveRecord: 4.0ms)
'Unpermitted parameter : : id'를 보내고 있습니다. 강력한 매개 변수가 아닌'id' 속성이 있습니다. –
Thanks @ SebastiánPalma, 네, 저것을 보았습니다. 나는 그것이 조인 테이블이고 id 컬럼이 존재하지 않기 때문에 실제로 id를 보내고 싶지 않다. 내 강력한 매개 변수에'id'를 추가하면 다음과 같은 오류가 발생합니다.'NoMethodError (unilited 메소드'to_sym 'for nil : NilClass) :'. 그래서 나는 더 큰 문제가 있다고 생각합니다. :( – Anders