我想要做的是在更新时增加关联模型中的值。
schedule
has_many rooms
和rooms
belongs_to schedule
。
我想在房间模型中增加day
。
accepts_nested_attributes_for :rooms, allow_destroy: true
也在schedule.rb
虽然day
以外的字段将通过视图输入,但我想仅自动更新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 %>
如果你能给我任何建议,我将不胜感激。
答案 0 :(得分:0)
您应该使用Rails counter_cache方法Rails Guide - Counter Cache。惯例是命名days
列schedules_count
,但您可以在counter_cache声明中指定列。
因此,在您的Schedule模型中,您需要将counter_cache添加到您的belongs_to关联中以获取空间。
class Schedule < ActiveRecord::Base
belongs_to :room, counter_cache: :days
end
这比使用increment
的回调要好,因为它会在您销毁计划时进行处理。