Проверка данных модели с другого контроллера в Rails - PullRequest
1 голос
/ 13 ноября 2008

У меня есть две таблицы: Клиент (номер, имя, ...)
Покупка (идентификатор, пункт, дата, client_id, ...)

У них есть соответствующая модель с их валидациями. Что мне нужно, это создать нового клиента с новой покупкой, все в метод создания контроллера клиента. Примерно так:

def create  
  @client = Client.new(params[:client])

  respond_to do |format|
    if @client.save
      # Add purchase
      @sell = Purchase.new
      @sell.client_id = @client.id
      @sell.date = params[:date]
      # Fill another fields
      if @sell.save

        # Do another stuff...

      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @client.errors, :status => :unprocessable_entity }
      end

      flash[:notice] = 'You have a new client!'
      format.html { redirect_to(:action => :show, :id => @evento.id) }
      format.xml  { render :xml => @client, :status => :created, :location => @client }
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @evento.client, :status => :unprocessable_entity }
    end
  end
end

В модели покупки у меня есть:

belongs_to :client
validates_format_of :date, :with => /^20[0-9]{2}[-][0-9]{2}[-][0-9]{2}$/, :message => 'not valid'
validates_presence_of :date

И есть моя проблема: как я могу проверить правильность ввода даты посредством проверок в модель с контроллера клиента? И как я могу откатить новый клиент, созданный при ошибках?

Да, я могу выполнить проверку как самую первую инструкцию в методе с регулярным выражением, но я думаю, что это уродливо. Я чувствую, что может существовать обычный метод для выполнения этой проверки или даже для выполнения всех других операций (т. Е. Вызов метода create для Контроллера Покупки).

Можете ли вы вернуть меня на правильный путь?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 13 ноября 2008

Взгляните на следующую страницу , работающую с ассоциациями .

Rails предоставляет вам множество удобных методов для ваших объектов.

Вроде следующего:

Client.purchases.empty?
Client.purchases.size,
Client.purchases
Client.purchases<<(purchase)
Client.purchases.delete(purchase)
Client.purchases.find(purchases_id)
Client.purchases.find_all(conditions)
Client.purchases.build
Client.purchases.create

При использовании этих методов вы пользуетесь проверками на каждой из моделей.

Перейдите в консоль Rails, создайте нового клиента и попробуйте любой из вышеперечисленных методов. Вы быстро поймете, насколько они сильны, и вы сразу же отправитесь в путь.

Редактировать: Вот гораздо лучшее руководство по ассоциациям Rails!

1 голос
/ 13 ноября 2008

Немного зависит от ситуации, но вы можете использовать validates_associated для запуска проверок на связанных объектах. Затем вы можете создать пользователя (но не сохранять), создать покупку (но не сохранять) и попытаться сохранить пользователя. Если вы все сделали правильно, пользователь не сможет сохранить с ошибкой проверки на связанном объекте.

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