2016-11-03 14 views
1

私は、リソースのコレクション(HABTM)をReservedResourcesの中間クラスを介して入れたいクラス予約をしています。これは、ReservedResourcesのような古典的なHABTMではありません。予約されているリソースの量を保存します。Rails 5フォームフィールドからカスタムパラメータへ

私は、動的にこのようなものを利用可能なリソースを表示したいフォームで:

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

問題はXXがリソースIDである「reserved_resourcesXX」という名前のメソッドは、存在しないことです。 IDごとにリソースの量をparamsハッシュに保存したいのですが、それはできません。

可能ですか?もしそうなら、どうですか?私はこのためにJSを避けたいです...

+0

をそれは通常のHABTM関係ではなく、余分なフィールド量を追加しますか? –

+0

ええ、基本的に。私は自分のミドルテーブルを使って2つのモデルを関連づけました。おそらくレールで私の未熟さを解消しました –

+0

internは '@ resources'の属性ですか? – 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

Ok。ビジネスには従業員(ユーザー)とリソースがあります。私のビジネスを管理するために、(フォームを通じて)予約を作成したいと思います。その予約では、私が作成している予約に割り振ることができる利用可能なリソースを番号フィールドでリストしたいと思います。リソースが特定の従業員によってビジネスに挿入されているため、リストに問題があります。 ... <%@ 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_resourcesテーブルにreserved_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

元の質問を編集して、達成しようとしていることについてもう少し明確にし、現在持っているものについてもう少し詳しく知る必要があると思います。つまり、モデル、コントローラ、フォームから関連する部分を意味します。私はあなたがaccepts_nested_attributesを使用し、強力なパラメータとフォームを変更する必要があると思われます。 – David

関連する問題