2

這是我第一次在這裏提出問題。我嘗試了很多答案,但都沒有解決我的問題。(對不起,我正在努力改進)。在rails中爲參數和嵌套模型分配參數4

Okai,問題如下:我正在做一個電子商店,它有產品。產品必須有一個類別,但不一定是一個子類別。這個想法是,只有創建一個產品,包括類別和子類別名稱作爲參數,rails必須自動創建類別和子類別表的條目。

問題是當我用窗體創建一個產品。當我這樣做,在控制檯中我看到:「不允許的參數:類別,子類別」

這是三種型號:

class Product < ActiveRecord::Base 

    has_one :subcategory 
    has_one :category, through: :subcategory 

    accepts_nested_attributes_for :category, :subcategory 
end 

class Category < ActiveRecord::Base 
    belongs_to :product 
    has_many :subcategories 

    accepts_nested_attributes_for :subcategories 
end 

class Subcategory < ActiveRecord::Base 
    belongs_to :product 
    belongs_to :category 
end 

控制器相關部分:

def create 
    @titulo = "Catálogo Online" 
    @product = Product.create(product_params) 

    respond_to do |format| 
     if @product.save 
      format.html { redirect_to @product, notice: 'Producto creado.' } 
     else 
      format.html { render :new } 
     end 
    end 
end 

... 

def product_params 
    params.require(:product).permit(:name, :description, :price, :stock, :code, category_attributes: [:id, :category, :product_id ], subcategory_attributes: [:id, :subcategory, :category_id, :product_id ]) 
end 

而表格

<%= form_for(@product) do |f| %> 
    <% if @product.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@product.errors.count, "error") %> prohibited this product from being saved:</h2> 

     <ul> 
     <% @product.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :category %><br> 
    <%= f.text_field :category %> 
    </div> 
    <div class="field"> 
    <%= f.label :subcategory %><br> 
    <%= f.text_field :subcategory %> 
    </div> 
    <div class="field"> 
    <%= f.label :name %><br> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :code %><br> 
    <%= f.text_field :code %> 
    </div> 
    <div class="field"> 
    <%= f.label :description %><br> 
    <%= f.text_area :description %> 
    </div> 
    <div class="field"> 
    <%= f.label :price %><br> 
    <%= f.number_field :price %> 
    </div> 
    <div class="field"> 
    <%= f.label :stock %><br> 
    <%= f.check_box :stock %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

請,我已經三天有這個問題。我不知道該怎麼辦。謝謝。

回答

0

我想說的問題是,您正在使用text_field輸入作爲category和sub_category。爲了使其工作,您應該使用選擇字段,然後在UI中提供另一種方式來創建類別和子類別。

更換f.text_field:與子類別(並刪除:類別選項,因爲您的數據模型將不會允許這一點)類似...

<%= f.collection_select :subcategory_id, Subcategory.all, :id, :name, { selected: @product.subcategory_id } %> 

...應該使你的產品分配給一個子類別。

此外,您的數據模型在這裏看起來不正確。產品需要屬於子類別,而不是相反。

+0

謝謝。這是有效的,並且對形式的改進非常有用,但它不完全是我想要的。這個想法是,相同的表單可以爲所有表創建條目。這可能嗎?尊重數據模型:本來我就是這麼說的,但我放棄了它,因爲我意識到做我想要的邏輯更復雜。這是更好的其他數據模型?爲什麼?。我是這方面的初學者,所以所有的幫助都是值得歡迎的。 非常感謝。 –

+0

我不認爲你有任何選擇,只能再看看你的數據模型。是。內聯創建相關模型很複雜!也許首先做一些簡單的事情(分配已經創建的類別),然後一旦你有這個工作,看看如何讓用戶創建更多的類別。我認爲你的子類別設置也會讓事情變得複雜! – stef