Создание новой записи в таблице соединений - PullRequest
0 голосов
/ 28 декабря 2010

У меня есть модель под названием Уведомления, которая в основном действует как таблица соединения между запросами и размещениями.

В моем методе «создания» в контроллере запросов у меня есть:

   # find associated accommodations, currently matching: location
    @accommodations = Accommodation.where('location' => :location)
    @accommodations.each do |accommodation|
      @notification = @request.notification.build('accommodation_id' => accommodation.id ).save
    end

Который, похоже, не создает новую запись уведомления. Что я тут не так делаю?

Модели / accommodation.rb

class Accommodation < ActiveRecord::Base
  validates_presence_of :title, :description, :thing, :location, :spaces, :price, :photo
  attr_accessible :photo_attributes, :title, :description, :thing, :location, :spaces, :price
  has_one :photo
  has_many :notifications
  belongs_to :user
  accepts_nested_attributes_for :photo, :allow_destroy => true
end

Модели / notification.rb

class Notification < ActiveRecord::Base
  attr_accessible :accommodation_id, :request_id
  has_one :request
end

Модели / request.rb

class Request < ActiveRecord::Base
  attr_accessible :firstname, :lastname, :email, :phone, :datestart, :dateend, :adults, :children, :location, :status
  validates_presence_of :firstname, :lastname, :email, :phone, :datestart, :dateend, :children, :adults, :location
  has_many :notifications
end

Ответы [ 2 ]

1 голос
/ 28 декабря 2010

@request.notification.build должно быть @request.notification с .build, так как запрос has_many уведомлений.

Кроме того, вы устанавливаете @notification, чтобы стать значением того, что возвращает .save, которое будет только true или false. Возможно, вы захотите использовать create, если хотите, чтобы @notification указывал на фактический объект. Кроме того, вы, вероятно, уже знаете, что он будет продолжать перезаписывать переменную @notification на каждой итерации, что вы можете или не можете хотеть.

Многое можно сказать о приведенном примере, я думаю, что реализация очень плохая. Но это не относится к вопросу о том, почему запись уведомления не сохраняется.

0 голосов
/ 28 декабря 2010

Вы не определяете @request или: location в вашем контроллере. Предполагая, что это объект запроса:

@notifications = Array.new

@accommodations = Accommodation.where('location' => :location)
Accommodation.find_each(:conditions => { 'location' => :location }) do |a|
  notification = @request.notifications.create('accommodation_id' => a.id)
  @notifications << notifications
end

Точно так же, как @AnomalousThought сказал:

Многое можно сказать о Приведенный пример, я думаю, реализация совершенно плохая. Но это не относится к вопросу о почему запись уведомления не сохраняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...