2013-12-21 5 views
0

Существует следующий код в контроллере Комментарии:Как проверить, существует ли связанный объект в Rails?

def create 
    current_user.comments.create!(place: current_place, content: params[:content]) 
    render json: encode_result 
    end 

    private 
    def current_place 
     Place.find(params[:place_id]) 
    end 

Этот код создает новый комментарий для текущего пользователя и текущего места; если текущее место не существует, чем этот код выдает исключение RecordNotFound. Я могу отправить 'place_id' вместо 'place' для метода 'create', но мне нужно проверить, существует ли место перед созданием нового комментария. Пожалуйста, скажите, мое решение хорошее или есть лучший способ? Заранее спасибо.

ответ

1

Это то, что он должен делать. Ваш код совершенен, поскольку он написан сейчас. Вы специально хотите остановить выполнение, если указанная запись не существует. Все, что вам нужно сделать, это обработать исключение.

Вы можете сделать это для всего своего контроллера с помощью rescue_from или всего приложения, разместив rescue_from в своем ApplicationController.

0

Вы можете сделать как это .........

def create 
current_user.comments.create!(place: current_place, content: params[:content]) if current_place 
    render json: encode_result 
    end 

    private 
    def current_place 
     Place.find(params[:place_id]) 
    end 
+0

Это будет вызывать тот же запрос дважды один для если условия и второй один при назначении места: current_place. поэтому это не оптимальное решение. Постарайтесь сделать это оптимальным, я голосую за него –

+0

ok ................. –

Смежные вопросы