2016-03-25 17 views
0

1 ver şu modeller: Ben yapmak istiyorum neRails4: max değeri nasıl ayarlanır +

class Schedule < ActiveRecord::Base 
    has_many :rooms 
    accepts_nested_attributes_for :rooms, allow_destroy: true 
end 

class Room < ActiveRecord::Base 
    belongs_to :schedule 
end 

eklenen verilere maksimum değeri + 1 ayarlamaktır. güncellemeden güncellemeden sonra

Day 1 
schedule_title A 
    room_name A 

önce Örneğin

, ben yan odada eklediğinizde 2 oda tablosunda yeni veriler için sütun day ayarlı istiyorum

Day 1 
schedule_title A 
    room_name A 

Day 2 # I'd like to set `2` to `day` column in room table 
schedule_title B 
    room_name B 

.

schema.rb

create_table "rooms", force: :cascade do |t| 
    t.string "name" 
    t.integer "schedule_id" 
    t.integer "day", default: 1 
    ... 
    end 

    create_table "schedules", force: :cascade do |t| 
    t.string "title" 
    t.integer "user_id" 
    t.date  "departure_date" 
    ... 
    end 

bazı girdikten sonra düğmesi ve güncelleştirme "Oda Ekle" düğmesine, oda tablosunda yeni veriler için day için maksimum değeri + 1 ayarlamak istiyorum.

_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 %> 

schedlues_controller.rb

class SchedulesController < ApplicationController 
... 
    def 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 
Bana herhangi bir öneri verebilir sevindirici olabilir

.

cevap

0
Room.maximum(:day) 

Oda tablonun gün sütununda maksimum değeri vermeniz gerekir.

+0

Hızlı yanıtınız için teşekkür ederiz, @ dkp. Bu değeri + 1'in yeni kayda nasıl ayarlanacağını bilmek isterim. – SamuraiBlue

0

İki yaklaşım vardır.

Yaklaşım 1:

izlemeyi deneyin it Yourself yapın:

class Schedule < ActiveRecord::Base 
    has_many :rooms 
    accepts_nested_attributes_for :rooms, allow_destroy: true 
end 

class Room < ActiveRecord::Base 
    belongs_to :schedule 
    before_create :set_date 

    protected 
    def set_date 
    if self.date.nil? 
     self.date = self.schedule.rooms.collect(&:date).max + 1 
    end 

    true 
    end 
end 

Yaklaşım 2:acts_as_list bir göz atın varolan uygulama

kullanın. position, date ürününüze eşdeğerdir.

+0

Cevabınız için teşekkür ederiz, @Dharam. Ben Yaklaşım 1'i denedim, ancak gün artmıyor (hala 1). Benim günlüğümde [1m [36m (0,4ms) [0m [1mSELECT MAX ("oda". "Gün") FROM "odalar" NEREDE "odalar". "Schedule_id" =? [0m [["schedule_id", 249] ] çıktı alındı. Bu yüzden, SQL 'select max (gün) 'den, program_id = 249;' sonuç '1' olan odalardan denedim. – SamuraiBlue

İlgili konular