-2

私は予約システムで働いています。私は制約に問題があります。私はコテージが空いているコテージのリストを持っています。働いているシステム私は顧客の予約コテージを空にしています空きコテージの数は減少は..私はここに達成したいものを選択が=?..なら、整数属性の値をどのように減らすのですか?

..私はここで私は始め、いくつかのコード...そしてあなたは私の説明を理解するためのイメージを持っている私を助けてくださいことは次のとおりです。ご予約の前に

:コテージ在庫状況:5

もし私が情報を記入したら&「小さなコテージ」とクレア可用性値は-1になります。予約後

:コテージ可用性:4

reservation.rb

ActiveRecord::Schema.define(version: 20160514141006) do 

    create_table "cottages", force: :cascade do |t| 
    t.string "name" 
    t.string "rates" 
    t.integer "no_of_vacant_cottage" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

    create_table "reservations", force: :cascade do |t| 
    t.date  "reservation_date" 
    t.string "customer_name" 
    t.string "address" 
    t.string "contact_no" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.integer "cottage_id" 
    end 

    add_index "reservations", ["cottage_id"], name: "index_reservations_on_cottage_id" 

end 

schema.rb

<%= form_for(@reservation) do |f| %> 

    <%= f.label :reservation_date %><br> 
    <%= f.date_select :reservation_date %> 

    <%= f.label :customer_name %><br> 
    <%= f.text_field :customer_name %> 

    <%= f.label :address%><br> 
    <%= f.text_field :address %> 

    <%= f.label :contact_no %><br> 
    <%= f.text_field :contact_no %> 

    <%= f.label :cottage_class %><br> 
    <%= f.select :cottage_id, options_for_select(Cottage.all.map { |g| [g.name, g.id]}) %> 

    <%= f.submit %> 
<% end %> 

form.html.erb 10

class Reservation < ActiveRecord::Base 
    validates :customer_name, :presence => true 
    validates :address, :presence => true 
    validates :contact_no, :presence => true 

    belongs_to :cottage 
end 

cottage.rb

class Cottage < ActiveRecord::Base 
    has_many :reservations 
end 

Form and list of cottages existing on the database

+1

2物事:あなたは複数のルビーオンレールのタグを入れて(ルビーオンレール-3ルビーだからあなたのコントローラには、おそらくそのような何かを持っていました-on-rails-4 ruby​​-on-rails-3.2)を使用していますか?第二に、あなたの予約システムを理解するのに困っています。あなたの空き状況を日付にするべきではないですか?日付別に言えば、その日の予約に基づいて、利用可能日は日付によって異なります。私の場合は、コテージモデルに可用性フィールドを持たせるのは意味がありませんが、コテージモデルには特定の日付の可用性を返すメソッドの可用性(日付)がある可能性があります。 – Pholochtairze

+0

@Pholochtairze申し訳ありません私は "空きコテージの数" [小、中、大] –

+0

@ Pholochtairzeに名前を変更する私の問題は、私がコテージを予約した後no_of_vacant_cottageの値を減らす方法にのみ焦点を当てています.. –

答えて

0

私は必ずしもあなたがしようとするかのポイントが表示されていないが、それでも私はあなたの特定のproblenにお答えしようとするでしょう。

まず、我々はあなたが置くことができ、テーブルを作成するとき、このために、5に空いているコテージの数を初期化したい:

create_table "cottages", force: :cascade do |t| 
    # ... 
    t.integer "no_of_vacant_cottage", default: 5 
    #... 
end 

それとも、直接あなたの移行を変更することができない場合は、特に移行を作ることができますそのために:あなたはあなたがを使用することができます。1.により対応するコテージのno_of_vacant_cottage列を減少する新しい予約をするたび

change_column :cottages, :no_of_vacant_cottage, :integer, :default => 5 

わかりましたので、今、私たちのno_of_vacant_cottage列は、今5に設定デフォルトでありますそれについては。おそらくここにほしいのはafter_saveです。

だからあなたの予約モデルにあなたはこのようなものがあります:

class Reservation < ActiveRecord::Base 
    validates :customer_name, :presence => true 
    validates :address, :presence => true 
    validates :contact_no, :presence => true 
    belongs_to :cottage 

    after_save :decrement_no_of_vacant_cottage 

    def decrement_no_of_vacant_cottage 
    c = self.cottage 
    c.update(no_of_vacant_cottage: c.no_of_vacant_cottage -1) 
    end 
end 

を、それはこのに予約がを保存して、あなたのcottage_idを変更してもそのされるたびに行いますので、予めご了承ください古いコテージはまだ "-1"のままです。私はコールバックが何であるか知っているので、これらのケースを処理させます。

「お客様の予約後またはc.update(可用性:c.availability - 1)メッセージの後にお客様に気付くためのコードは、「ご予約ありがとうございました」のようなメッセージが表示されます。これは非常に単純です。コントローラ内でそのロジックを処理するだけです。

if @reservation.save 
    # some code 
else 
    # handle the unsuccessful save 
end 

になります:ここ

if @reservation.save 
    notification_function 
    # notification_function could be for instance flash[:notice]="Thank you for your reservation." 
    # additional code code 
else 
    # handle the unsuccessful save 
end 
+0

これはありがとうございます。このコードを試してみます。結果を更新します。 –

+0

コードが動作し、問題が解決しました。 –

+0

@CrossGozonよろしくお願いいたします。あなたの問題が解決したら、小さな緑色のチェック(私の答えの左にある数字のすぐ下にある)および/または私の答えに投票して、受け入れられた答えとしてマークすることができます; http: /meta.stackexchange.com/questions/147531/how-mark-my-question-as-answered-on-stackoverflow – Pholochtairze

関連する問題