레일에서 작업하면서, cocoon gem을 통합하여 레시피 양식에 성분 필드를 동적으로 생성합니다. 을 사용하지만 사용자 정의 중첩 속성 작성자를 사용하지 않고 작동하도록 할 수 있습니다. 예를 들어, 누에 고치를 통합하기 전에, 내 코드는 다음과 같이보고 :allow_destroy 옵션을 레일스의 사용자 정의 중첩 속성 작성기에 통합하는 방법
, 나는 ingredients_attributes 내 강력한 PARAMS을 수정하고 내 레시피 형태와 조리법 모델을 리팩토링해야하고, 그것은이다 고치 보석을 사용하려면#recipe.rb
class Recipe
# name:string
has many :ingredients
# accepts_nested_attributes_for :ingredients
# the method below should do exactly the same thing as accepts_nested_attributes_for
def ingredients_attributes=(attributes)
attributes.each do |i, ingredient_hash|
self.ingredients.build(ingredient_hash)
end
end
end
#ingredient.rb
class Ingredient
# name:string, price:integer
belongs_to :recipe
end
#recipes_controller.rb (just the params part)
def recipe_params
params.require(:recipe).permit(:name, ingredients_attributes: [:name, :price])
end
나에게 문제가되는 마지막 부분. 내가 그걸로 작동하도록 할 수 있습니다
accepts_nested_attributes_for :ingredients, reject_if: :all_blank, allow_destroy: true
하지만 내 사용자 지정 속성 작성기에 옵션을 통합하는 방법을 알고 싶습니다. 리팩토링 된 컨트롤러 및 양식 코드를 보는 것이 도움이된다면 게시 할 수도 있습니다. 감사.
Can 왜 그걸하고 싶니? 모델이 아닌 컨트롤러에 넣으면 훨씬 더 혼란 스럽습니다. – luissimo
질문이 이해가 가지 않습니다. 나는 컨트롤러에 아무것도 넣지 않을거야. 내 컨트롤러에서 변경된 유일한 것은 강력한 매개 변수입니다. 다른 모든 것은'recipe.rb' 파일에 있습니다. – TDB
레일에서 중첩 된 속성 처리를 다시 작성하는 경우, 좋은 시작점은 실제 레일 코드입니다 : https://github.com/rails/rails/blob/ 0fe76197d2622674e1796a9a000995a7a1f6622b/activerecord/lib/active_record/nested_attributes.rb # L319 – nathanvda