我有一個CRUD應用程序,您可以在其中創建比薩餅。您可以使用select
元素選擇基準,大小和配料。爲此,我使用了collection_select
。Rails屬性沒有正確分配
然而,當一個披薩創建時,這些屬性不會被分配給新的對象。
這是我的形式:
<div class="field">
<%= f.label :size_id %><br>
<%= collection_select(:size, :pizza_id, Size.all, :id, :name) %>
</div>
<div class="field">
<%= f.label :crust_id %><br>
<%= collection_select(:crust, :pizza_id, Crust.all, :id, :name) %>
</div>
<div class="field">
<%= f.label :toppings %><br>
<%= collection_select(:toppings, :pizza_id, Topping.all, :id, :name, {}, { :multiple => true }) %>
</div>
控制器,與scaffold
產生:
class PizzasController < ApplicationController
before_action :set_pizza, only: [:show, :edit, :update, :destroy]
...
def create
@pizza = Pizza.new(pizza_params)
...
end
...
private
def pizza_params
params.require(:pizza).permit(:name, :price, :size, :crust, :topping => [])
end
end
當我看到在日誌中的參數,我可以看到這一點:
處理由PizzasController#創建爲HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5oiP9EzpTC1fOVGSxv6MXF1qg786Vy3BtnIzEmCh19s=", "pizza"=>{"name"=>"Small pizza", "price"=>"10"}, "crust"=>{"pizza_id"=>"1"}, "toppings"=>{"pizza_id"=>["", "1", "2"]}, "commit"=>"Create Pizza"}
它看起來像沒有被保存的屬性不包含在pizza
鍵中,這就是爲什麼它們沒有被分配給對象。
我注意到輸入的name
的格式應該是pizza[attribute]
,所以它轉到正確的散列。所以,我想是這樣的:
<%= collection_select(:size, :pizza_id, Size.all, :id, :name) %>
這些參數:
Processing by PizzasController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"5oiP9EzpTC1fOVGSxv6MXF1qg786Vy3BtnIzEmCh19s=", "pizza"=>{"name"=>"Small pizza", "price"=>"10", "size"=>"1"}, "crust"=>{"pizza_id"=>"1"}, "toppings"=>{"pizza_id"=>["", "1", "2"]}, "commit"=>"Create Pizza"}
它不起作用,因爲它沒有轉化成大小合適的類。
我能做些什麼?