2016-11-03 49 views
1

我有一個類保留在其中我想通過一箇中間類ReservedResources放置一個資源集合(HABTM)。這不是一個典型的HABTM,因爲在ReservedResources中我想存儲保留的資源數量。Rails 5表單字段到自定義參數

在表單我要動態地顯示可用的資源,這樣的事情:

<% @resources.each do |r| %> 
     <%= f.label "#{r.name}" %> 
     <%= f.number_field "reserved_resources#{r.id}".intern %><br> 
    <% end %> 

的問題是,沒有一個叫「reserved_resourcesXX」的方法,其中XX是資源ID。我想在params散列中存儲每個ID的資源數量,但我無法做到這一點......

這可能嗎?如果是這樣,怎麼樣?我想爲此避免JS ...

+0

這是不是一個正常的HABTM關係,你添加額外的場數量? –

+0

是的,基本上。我做了我自己的中間表來把這兩個模型聯繫起來,可能是因爲我的經驗不足而導致的軌道 –

+0

實習生屬於@資源嗎? – sahil

回答

0

我剛開始時會帶着一個我想讓你去的例子。

方案

想象一下,一個店賣的產品。用戶可以預訂產品以便以後購買。他們還可以定義他們要保留的每個產品的數量。現在

class User 
    has_many :reservations 
    has_many :products, through: :reservations 
end 

class Product 
    has_many :reservations 
    has_many :users, through: :reservations 
end 

class Reservation 
    belongs_to :user 
    belongs_to :product 
end 

創建預訂模型時,你可以簡單地添加一個額外的字段quantity,造成這種保留模式:

create_table "reservations" do |t| 
    t.integer "user_id", 
    t.integer "product_id", 
    t.integer "quantity", 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

所以你需要一個基本的HABTM關係,並添加額外的字段。這正是HABTM的目的,在需要時添加額外的信息。

你的用例

適應給你的模型,我假設HTML表格將視作從那裏還挺簡單的。

+0

我已經有類似的東西: 類預訂 的has_many:reserved_resources 結束 類資源 的has_many:reserved_resources 結束 類ReservedResource belongs_to的:預約 belongs_to的:資源 結束 不過,我想補充從預先定義的資源集合到預留表單的資源,每種資源都有特定的數量。這是錯誤的原因,因爲資源名稱不能用作字段標識符。 –

+0

然後請重新說明你的問題,我無法弄清楚你正在努力實現什麼 –

+0

好的。企業擁有員工(用戶)和資源。爲了管理我的業務,​​我想創建一個預訂(通過表單)。在該預訂上,我希望列出可以分配給我創建的預留的可用資源,並帶有數字字段。由於資源是由特定員工插入企業的,因此我無法列出它們 ... <%@ resources.each do | r | %> <%= f.label「#{r.name}(#{r.current_quantity})」%> <%= f.number_field as:「reserved_resources#{r.id}」。intern%>
<% end %> <%= f.submit%> –

0

其實你應該是這樣的:

class Reservation < ApplicationRecord 
    has_many :reserved_resources 
    has_many :resources, through: :reserved_resources 
end 

class Resource < ApplicationRecord 
    has_many :reserved_resources 
    has_many :reservations, through: :reserved_resources 
end 

class ReservedResource < ApplicationRecord 
    belongs_to :reservation 
    belongs_to :resource 
end 

現在,假設你有reserved_resourcesreserved_quantity屬性。從鐵軌控制檯使用

例子:

resource = Resource.create(name: 'resource 1') 
reservation = Reservation.create(name: 'reservation 1') 
resource.reserved_resources.create(reservation: reservation, resource_quantity: 20) 

reservation = Reservation.create(name: 'reservation 2') 
resource.reserved_resources.create(reservation: reservation, resource_quantity: 10) 

健全檢查:

resource.reservations.count 
=> 2 

然後你可以通過做得到一個特定的資源預留資源的總量:

​​
+0

這是正確的,但現在我需要保留一份表格,以呈現所有可用資源,以便用戶選擇要添加哪些資源,這就是困難的部分......我該怎麼做這樣的表格? –

+0

我認爲你需要編輯你的原始問題,並使它更清楚一點,你想要達到什麼樣的目標,以及關於你目前擁有什麼的更多信息 - 這意味着你的模型,控制器和表單中的相關部分。我懷疑你需要使用accept_nested_attributes並修改你的強參數和表單。 – David