私がしたいのは、更新時にアソシエーションモデルの値をインクリメントすることです。強いパラメータにインクリメントメソッドを使う方法
schedule
has_many rooms
およびrooms
belongs_to schedule
。 客室モデルでday
を増やしたいと思います。 day
除くフィールドは、ビューを介して入力されるであろうが
accepts_nested_attributes_for :rooms, allow_destroy: true
もschedule.rb
で定義されている、私は唯一のday
自動的に更新したいと思います。
私はincrement
メソッドなどを使用しようとしましたが、適用方法を理解していません。
私が期待するビュー画像は次のとおりです。
Day1
schedule_title1 (Mar 25, 2016)
room_name1
追加した新しい日。
Day1
schedule_title1 (Mar 25, 2016)
room_name1
Day2
schedule_title2 (Mar 26, 2016)
room_name2
schema.rb
create_table "rooms", force: :cascade do |t|
t.string "name"
t.integer "schedule_id"
t.integer "day", default: 1 #I'd like to increment when I update
...
end
schedlues_controller.rb
class SchedulesController < ApplicationController
...
def update
#I tried some code here before update
if @schedule.update(schedule_params)
flash[:success] = "schedule updated!"
redirect_to root_url
else
render 'edit'
end
end
...
private
def schedule_params
params.require(:schedule).permit(:title, :departure_date, rooms_attributes: [:id, :_destroy, :room, :day])
end
私はいくつかを入力した後、ボタンやアップデート "部屋を追加" を押すと、私はしたいのですが増分day
。
_schedule_form.html.erb
<%= simple_nested_form_for(@schedule) do |f| %>
<%= f.label :title %>
<%= f.text_field :title, class: 'form-control' %>
<%= f.label :departure_date %>
<%= f.text_field :departure_date, class: 'form-control' %>
<div id="room">
<%= f.simple_fields_for :rooms do |r| %>
<%= r.input :room %>
<% end %>
<%= f.link_to_add "Add room", :rooms, data: {target: '#room'}, class: "btn btn-primary" %>
</div>
<% end %>
あなたが私にどんな提案を与えることができればそれをいただければ幸いです。
部屋自体を更新するためのコールバックの取り付けはどうですか?私はあなたが一日増やしたいと思う状況を完全には分かっていません。 'after_update - > {increment!(:day)}' – oreoluwa
@ololuwaさん、あなたのご意見ありがとうございます。あなたがコメントしたように、私が望むものは不明なことがあります。だから私は新しい質問[最大値を取得して最大+1に設定する方法]を作成しました(http://stackoverflow.com/questions/36228240/how-to-get-the-max-value-and-set-to- max-1)。あなたが私に何か考えを与えることができれば幸いです。 – SamuraiBlue