2016-04-04 10 views
0

Wie kann ich die Daten in der Großeltern Association abrufen.Rails: Wie legt man den Großvater-Wert (Assoziation) in ActiveRecord fest

Geben Sie die folgenden Modelle:

class Schedule < ActiveRecord::Base 
    belongs_to :user 
    has_many :rooms 
    accepts_nested_attributes_for :rooms, allow_destroy: true 
    ... 

class Room < ActiveRecord::Base 
    belongs_to :schedule 
    has_many :events 
    accepts_nested_attributes_for :events, allow_destroy: true 
    ... 

class Event < ActiveRecord::Base 
    belongs_to :room 
    ... 

I schedule.departure_date in event.rb before_save für die Verwendung von Callback bekommen möchten.

event.rb

class Event < ActiveRecord::Base 
    belongs_to :room 
    before_save :assign_date 

    private 

    def assign_date 
     self.from = DateTime.new(schedule.departure_date.year, schedule.departure_date.month, schedule.departure_date.day, from.hour, from.min) 
    end 

schema.rb

create_table "schedules", force: :cascade do |t| 
    t.date  "departure_date" 
    ... 

create_table "rooms", force: :cascade do |t| 
    t.integer "schedule_id" 
    ... 

create_table "events", force: :cascade do |t| 
    t.time  "from" 
    t.integer "room_id" 
    ... 

Wenn ich versuche, diesen Code auszuführen, erscheint die folgende Fehlermeldung.

development.log

NameError (undefined local variable or method `schedule' for #<Event:0x000000058bdd28>): 
    app/models/event.rb:15:in `assign_date' 
    app/controllers/schedules_controller.rb:51:in `update' 

schedules_controller.erb

def update 
    @schedule.room.maximum(:day) 
    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, events_attributes: [:id, :_destroy, :from, :to, :title, :detail]]) 
    end 

I simple_nested_form_for und simple_fields_for meiner Meinung nach verwenden.

Es wäre zu schätzen, wenn Sie mir geben könnten, wie man schedule.departure_date in event.rb bekommt.

+0

Ich denke, es ist ein Tippfehler Sie Schedule statt Zeitplan für Ihre Antwort –

Antwort

1

Es gibt eine Diskussion über ein ähnliches Problem hier: Ich denke, die zweite Antwort könnte für Sie nützlich sein. belongs_to through associations

Der Beantworter schlägt vor, Delegierung zu verwenden, um es zu lösen.

+0

Danke verwenden sollten, @Albin. Ich kann die Daten mit 'has_one: schedule, through:: room' in' event.rb' einstellen. – SamuraiBlue

Verwandte Themen